Laravel не получает данные от Postman

#laravel #postman

#laravel #postman

Вопрос:

Я начинаю работу над API в Laravel, используя Postman. Однако, независимо от того, что я отправляю через Postman, полученный запрос $ пуст.

Маршрут в Laravel:

 Route::group(['namespace' => 'Api', 'as' => 'api.'], function() {
    Route::post('/stock-list', 'DataController@stock_list');
});
  

Метод контроллера:

 public function stock_list(Request $request)
{
    logger()->info($request->all());
    return response()->json([
        'request' => $request
    ]);
}
  

Журнал показывает, что $request->all() это пустой массив. Поскольку я также возвращаю $request в Postman в качестве теста, это то, что Postman получает в качестве ответа:

 {
    "request": {
        "attributes": {},
        "request": {},
        "query": {},
        "server": {},
        "files": {},
        "cookies": {},
        "headers": {}
    }
}
  

Что я отправляю? В Postman у меня есть это содержимое на вкладке тела:

 {
    'foo' : 'bar'
}
  

Тип тела выбирается как raw , и Postman считывает его как JSON .

Что касается аутентификации, я выбрал basic auth имя пользователя и пароль на данный момент, однако я ничего не сделал на стороне Laravel по этому поводу (как вы можете видеть из маршрута и контроллера). Насколько я могу судить, на данный момент это не должно иметь значения — запрос все равно должен быть получен Laravel правильно, тогда либо должен быть возвращен ответ «не прошедший проверку подлинности», либо аутентификация вообще не должна происходить, поскольку auth на маршруте нет промежуточного программного обеспечения.

Может кто-нибудь объяснить причину проблемы и предложить решение?

Редактировать

Вот заголовки в Postman:

введите описание изображения здесь

Комментарии:

1. Правильно ли установлен ваш Content-Type заголовок запроса application/json ?

2. Не знаю 'request' => $request , включает ли он все параметры, поэтому вы тоже можете его изменить 'request' => $request->all()

3. @Roland Starke $request->all() добавит только атрибуты, $request добавит все, как вы можете видеть в его ответе

4. @jovan Когда вы выбираете «raw» в postman, вам нужно щелкнуть выпадающий список и выбрать json.

5. @bhucho Я тестирую его, 'request' => $request, 'params' => $request->all(), запрос пуст, как и в вопросе, содержит только параметры {'foo' : 'bar'} ( нужен указанный заголовок content-type.)

Ответ №1:

 {
    'foo' : 'bar'
}
  

недопустимый JSON. По стандарту вы должны использовать двойные кавычки.

 {
    "foo" : "bar"
}
  

Вы уже установили content-type в json, что хорошо. Я считаю, что это должно работать сейчас.

Комментарии:

1. Это ничего не меняет.

Ответ №2:

Я не понял, почему вы использовали logger()-> info($request-> all()); в вашем коде, но я попробовал ваш код, как показано ниже, и он сработал

маршрут:

 Route::group(['prefix' => 'Api'], function() {
Route::post('stock-list', 'ApiUsersControllers@stock_list');
});
  

контроллер:

  public function stock_list(Request $request)
{
    $request=$request->all();
    return response()->json([
        'request' => $request
    ]);
}
  

postmans:
введите описание изображения здесь