現在AngularJS + PHPでコードを書いています。
$resourceサービスを使ってデータの操作を行いたいなーと思い、ほげほげーっとコードを書いて、ふがふがーっと$_POSTで受け取る。
ふがふがーっと受けと・・・あれ・・・うけ・・・とれない??
どうやら、PHP側で受け取るには下記のようにしなきゃならないとのこと。 (angularJSの$httpで送ったデータを$_POSTで受け取る – Qiita より)
$request_body = file_get_contents('php://input'); $data = json_decode($request_body,true);
なんじゃそら。わたしゃ$_POSTで受け取りたいんだ!
色々調べると、$httpサービス内で、jQueryを使ってパラメーターをシリアライズしてあげればいいらしい。
えええ?このためだけにjQuery読み込むのかい?(VC: マスオさん) もっとスマートな方法ないわけ?と思って調べたら、Angular1.4からは「$httpParamSerializerJQLike」というサービスが追加されて、これを使えばシリアライズできるらしい。ほほう。
(参考: もうすぐリリースされるAngularJS 1.4の機能を先取りチェックしよう (1/2):CodeZine(コードジン))
var services = angular.module('Hoge', ['ngResource']); services.factory('Book', ['$resource', '$httpParamSerializerJQLike', function($resource, $httpParamSerializerJQLike){ return $resource('/book/:id', {id : '@id'}, { save : { method : 'POST', headers : {'Content-Type': 'application/x-www-form-urlencoded'}, transformRequest : function(data){ if(typeof data === 'undefined'){ return data; } return $httpParamSerializerJQLike(data); // パラメーターをjQuery方式に変換する } } }); } ]);
これでPHP側は$_POSTで受け取れるようになった。よしよし。
けどこれめんどくさいな。module.config()でデフォルト指定できないのかな。内部で使われている$httpを上書きしてもダメだったけど・・・何かよい方法あったら教えてくださいませ。