現在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を上書きしてもダメだったけど・・・何かよい方法あったら教えてくださいませ。
