サーバーで実行されているSLIMphpフレームワークでBackbone.jsを使用して、コレクションをデータベースにRESTfulに保存しようとしています。
これが私のコレクションです:
_var newUser = this.collection.create(
formData,
{
wait: true,
success: $.proxy(function() {
this.collection.currentUser = newUser;
App.Router.navigate('', { trigger: true });
}, this)
}
);
_
これが私のSLIMルートです:
_$api->post('/users', function() use($api, $db) {
$request = $api->request()->post();
$api->response()->header('Content-Type', 'application/json');
$result = $db->users()->insert($user);
if( $result ) {
echo json_encode(array(
'id' => $result['id']
));
}
else {
echo json_encode(array(
'status' => false,
'message' => 'error_creating_user'
));
}
});
$api->run();
_
コレクションでcreate()
を呼び出すと、サーバーの応答で非推奨の警告が表示されます。
_Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0
_
私はこれらの指示に従い、次のことを行いました。
ルートの前にこれを追加しました:
_ini_set('always_populate_raw_post_data', '-1');
_
そして私のPOSTルート内から私は次のようにリクエストペイロードを受信しようとしました:
_$request = file_get_contents('php://input');
_
このコードの変更後、私が得ている応答は同じままです...
[〜#〜]編集[〜#〜]
空のコールバックでもエラーが発生します。
_$api->post('/users', function() use($api, $db) {
// nothing
});
_
PHP 5.6。デフォルト値の_always_populate_raw_post_data
_は_0
_です。これにより、コードがコードであってもPHPは、警告をスローします。 _$HTTP_RAW_POST_DATA
_を使用しません。テキストが出力された後にheader()
を呼び出すと発生すると主張する人もいます。ini_set()
を使用しようとしても役に立ちません。
代わりに、php.iniで直接構成を変更する必要があります。
_always_populate_raw_post_data = -1
_
関連 ディスカッション in PHP内部。
基本的に、Automatically populating $HTTP_RAW_POST_DATA is deprecated...
エラーはいくつかの方法で解決できます。
Always_populate_raw_post_dataを-1php.iniファイルに変更すると、問題が解決します。ただし、php.iniファイルを十分に制御できない場合は問題になります。あなたは共有ホスティングについて考えることができます。
内部の.htaccessファイルをアプリケーションディレクトリに変更します。これにより、アプリケーションのみを個別に制御できます。 Apacheにも他のアプリケーション実行のPHP)にも影響しません。
<IfModule mod_php5.c> php_value always_populate_raw_post_data -1 </IfModule>
そして、私は2番目のアプローチをお勧めします。アプリケーションを共有ホスティングと専用サーバーホスティングの両方に配置できるためです。
Slimからのリクエストオブジェクトを介してPOSTデータをリクエストできます。
$api->post('/users', function() use ($api) {
var_dump($api->request()->post());
var_dump($api->request()->post('specificKey'));
});
ドキュメントは次のとおりです。 http://docs.slimframework.com/#Request-Variables