всегда заполняйте необработанные данные записи - Проблемы с доступом к полезной нагрузке запроса от магистрального создания
Я пытаюсь сохранить коллекцию в своей базе данных, используя Backbone.js с помощью ТОНКОЙ php-платформы, работающей на моем сервере.
Вот моя коллекция:
var newUser = this.collection.create(
formData,
{
wait: true,
success: $.proxy(function() {
this.collection.currentUser = newUser;
App.Router.navigate('', { trigger: true });
}, this)
}
);
Вот мой ТОНКИЙ маршрут:
$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');
И от в рамках моего почтового маршрута я попытался получить полезную нагрузку запроса следующим образом:
$request = file_get_contents('php://input');
После этого изменения в моем коде ответ, который я получаю, остался прежним...
РЕДАКТИРОВАТЬ
Ошибка возникает даже при пустом обратном вызове....
$api->post('/users', function() use($api, $db) {
// nothing
});
3 answers
В 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...
несколькими способами,
- НАСТРОЙКИ PHP
Изменение always_populate_raw_post_data на -1 файл php.ini решит проблему. Однако это становится проблемой, когда у вас недостаточно контроля над файлом php.ini. Вы можете подумать об общем хостинге.
- НАСТРОЙКИ APACHE
Изменение файла .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