Я пытаюсь сохранить коллекцию в моей базе данных RESTful с помощью Backbone.js с PHP SL Framework работает на моем сервере.
Вот моя коллекция:
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
связанные с обсуждение во внутренностях PHP.
В основном вы можете решить Automatically populating $HTTP_RAW_POST_DATA is deprecated...
ошибка в двух отношениях,
Изменение файла always_populate_raw_post_data на -1 php.ini решит проблему. Однако это становится проблемой, когда у вас недостаточно контроля над файлом php.ini. Вы можете думать о виртуальном хостинге.
Изменение файла .htaccess внутри вашего каталога приложений. Это даст изолированный контроль только над вашей заявкой. Это не повлияет ни на APACHE, ни на PHP выполнения других приложений.
<IfModule mod_php5.c>
php_value always_populate_raw_post_data -1
</IfModule>
И я бы порекомендовал второй подход. Так как он позволяет разместить ваше приложение как на виртуальном хостинге, так и на выделенном хостинге
Вы можете запросить данные POST через объект запроса, поступающий из Slim.
$api->post('/users', function() use ($api) {
var_dump($api->request()->post());
var_dump($api->request()->post('specificKey'));
});
Вот документация: http://docs.slimframework.com/#Request-Variables