Получение данных PUT в люмене
Я изо всех сил пытаюсь создать рабочие маршруты PUT в моем Lumen API. Мои запросы достигают правильного маршрута, но я не могу получить доступ к каким-либо значениям через $request->all()
,
Я понял, что PHP должен читать php://input
поток, чтобы получить тело PUT. Это сделано в getContent()
функция Symfony\Component\HttpFoundation\Request
, Тем не менее, эта функция вызывается несколько раз, и, поскольку входной буфер очищается при чтении, данные отсутствуют, когда мне это нужно.
Я также узнал, что когда я устанавливаю свой заголовок Content-Type на text/plain, я могу успешно напечатать $request->json()
, но когда я установил его на application/json, объект пуст.
Есть идеи?
PS: я знаю, что для запросов HTML вы должны добавить параметр _method, но так как я не делаю свои запросы через HTML, параметр не должен быть необходим.
Редактировать:
Мой маршрут:
$app->put('settings', 'SettingController@update');
Мой контроллер:
class SettingController extends Controller
{
public function update(Request $request)
{
print_r($request->all());
}
}
2 ответа
У меня была точно такая же проблема с Люменом. В public/index.php мне пришлось заменить:
Illuminate\Http\Request::capture();
$app->run($request)
с этим:
$app->run();
Примечание. Если вы хотите использовать объект Request после $app->run() (например, для ведения журнала или тестирования), вам следует использовать $app->request.
logging_function($app->request);
Content-Type вашего запроса должен быть установлен соответственно. В моем случае я отправлял данные json, поэтому я установил его в application/json.
Поэтому, когда я отправил это в теле запроса:
{"asd": "asdf"}
Я получил этот ответ с кодом от вашего контроллера:
Array
(
[asd] => asdf
)
У вас должен быть правильный тип контента в вашем заголовке. пытаться
application/x-www-form-urlencoded