実はv1.2の頃から Input::json() メソッドがあり、backbone.js(JSON通信)については、それを使えば良いっぽいです。Input::json() の使い方は Input::post() とかの使い方と同じなはずです。
--
backbone.jsを使っていて、当問題に出くわしました。
PHPの標準入力は
http://php.net/manual/ja/wrappers.php.php
"php://input でオープンしたストリームは、一度しか読み込めません。"
との事です。
Controller_RestでPUT/DELETEの時
* Controller_Rest::_detect_format
* Input::param
* Input::hydrate
と進んで、Input::hydrateでfile_get_contents('php://input')しているようです。
そのためか、Controller_Restを継承したサブクラスのメソッド(put_xxx/delete_xxx)で
file_get_contents('php://input')しても、内容は読み込めませんでした。
Input::put/Input::deleteで取れなくは無いのですが、試しにInput::putをログ出力してみると
--
Array
(
[{"id":"xxx","name":"yyy"}] =>
)
--
という、奇妙な形に。。。
至急、解決したかったので、Inputクラスをapp側で拡張、置換。
以下のメソッドを実装して、凌ぐことにしました。
public static function php_input() { static::$php_input === null and static::$php_input = file_get_contents('php://input'); return static::$php_input; }とりあえず、以下の形で取得できました。
--
{"id":"xxx","name":"yyy"}
--
No comments:
Post a Comment