2016-05-18 3 views
0

Я изо всех сил пытаюсь создать рабочие маршруты PUT в моем Lumen API. Мои запросы достигают правильного маршрута, но я не могу получить доступ к каким-либо значениям через $request->all().Получение данных PUT в Lumen

Я понял, что PHP должен прочитать поток php://input, чтобы получить тело PUT. Это делается в функции getContent()Symfony\Component\HttpFoundation\Request. Однако эта функция вызывается несколько раз, и поскольку входной буфер очищается при чтении, данные отсутствуют, когда мне это нужно.

Я также обнаружил, что когда я устанавливаю заголовок Content-Type в text/plain, я могу успешно распечатать $request->json(), но когда я установил его в application/json, объект пуст.

Любые идеи?

PS: Я знаю, что для запросов HTML вы должны добавить параметр _method, но поскольку я не выполняю свои запросы через HTML, параметр не нужен.

Edit:

Мой маршрут:

$app->put('settings', '[email protected]'); 

Мой контроллер:

class SettingController extends Controller 
{ 
    public function update(Request $request) 
    { 
     print_r($request->all()); 
    } 
} 
+0

Не могли бы вы показать свой код? –

+0

Какая часть? В моих route.php: '$ api-> put ('settings', 'SettingController @ update');'. В методе обновления я просто делаю 'print_r ($ request-> all())', который пуст. Кстати, я использую пакет dingo. – Martijn

+0

Покажите свой маршрут и контроллер, если вы его используете. –

ответ

0

Я имел точно такую ​​же проблему с люменов. В общественном/index.php мне пришлось заменить:

Illuminate\Http\Request::capture(); 

$app->run($request) 

с этим:

$app->run(); 

Примечание: Если вы хотите использовать объект Request после $ app-> Run() (например, для выполнения некоторых протоколирования или бенчмаркинга), вы должны использовать $ app-> request.

logging_function($app->request); 
+0

Это сделало трюк! Не уверен, почему у меня был 'Illuminate \ Http \ Request :: capture();' в первую очередь, но в любом случае – Martijn

0

Content-Type вашего запроса должен быть установлен соответствующим образом. В моем случае я отправлял данные json, поэтому я установил его в application/json.

Так что, когда я послал это в моем теле запроса:

{"asd": "asdf"} 

Я получил этот ответ с кодом от контроллера:

Array 
(
    [asd] => asdf 
) 
+0

Ну, это странно: когда я установил Content-Type в application/json, ответ пуст. Однако, когда я устанавливаю его в text/plain и вывожу '$ request-> json()', выводятся правильные данные. Может ли это иметь какое-то отношение к пакету API-интерфейса dingo? – Martijn

+0

Хорошо, мы выяснили, что динго не проблема; при выключении объект запроса все еще запускается дважды – Martijn

Смежные вопросы