AngularJSの$resourceデータをPHPの$_POSTでデータを受け取る

現在AngularJS + PHPでコードを書いています。

AngularJS

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

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください