Получение данных 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
Другие вопросы по тегам