Edited at

AngularJSのリクエストをPHPで処理するときのメモ

More than 5 years have passed since last update.

2014/05/13追記


AngularJSのリクエスト判定

ブラウザのアドレス入力によるリクエストなのか、AngularJSのHTTPリクエストなのか判定したい場合、

$_SERVER['HTTP_ACCEPT']に「application/json」が含まれるかで判断すると良いです。


isAngular.php

function isAngular()

{
if (false !== strpos($_SERVER['HTTP_ACCEPT'], 'application/json')) {
return true;
}
return false;
}

PhalconではRequestのインターフェイスにisAjaxというメソッドがあります。


ide/1.3.1/Phalcon/Http/RequestInterface.php

/**

* Checks whether request has been made using ajax. Checks if $_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest'
*
* @return boolean
*/

public function isAjax();

XMLHttpRequestで判定しているのでAngularのリクエストではtrueになってくれません。

他のWebフレームワークで同様のメソッドがあったとして、期待通りに動作してくれなければ$_SERVER['HTTP_ACCEPT']を使いましょう。


POSTのbody取得

AngularJSのPOSTリクエストは$_POSTに値が入ってくれません。

php://inputから読み込みます。


request.php

$request = json_decode(file_get_contents("php://input"))


2014/05/13追記 コメント欄より、PhalconではPhalcon\Http\RequestクラスのgetJsonRawBodyメソッドで取得できることを教えていただきました。

$json = $this->request->getJsonRawBody();