Ошибка 404 при проверке проверки класса запроса через расширение Chrome Postman

Ниже приведен мой метод действия контроллера. Вы можете видеть, что я передал параметр класса запроса для проверки перед сохранением данных в базе данных.

public function store(RoleRequest $request)
{
}

Мой класс запросов ниже.

class RoleRequest extends Request
{
    private $Role;

    public function __construct(IRole $_role) {
        $this->Role = $_role;
    }        
    public function authorize()
    {
        return true;
    }    
    public function rules()
    {
        return [
            'Role' => 'required|max:20|min:4,
        ];
    }    
}

Вышеприведенный код отлично работает, когда я запускаю его через веб-страницу (лезвие).

Я создал еще один контроллер для API для отправки запроса на сохранение. Ниже приведен код

class RoleApiController extends Controller
{
    public function store(RoleRequest $request)
    {

    }
}

Проблема возникает, когда я набираю всего 1 символ для имени роли, а класс запроса накладывает проверку, и я получаю ошибку 404. На этот раз я отправляю запрос из расширения Postman в Chrome.

Сведения об ошибке

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


person Pankaj    schedule 30.08.2016    source источник
comment
как выглядят ваши маршруты ??   -  person Maraboc    schedule 31.08.2016
comment
Могу показать маршрут. Одна вещь, которую я хотел добавить, что нет проблем, если идентификатор проверки не наложен. Единственная проблема заключается в том, что проверка происходит при отправке запроса из расширения Postman в Chrome. Также нет проблем, когда проверка происходит в случае отправки запроса через веб-браузер.   -  person Pankaj    schedule 31.08.2016


Ответы (1)


Класс Validation Request проверяет, является ли ваш запрос запросом ajax или обычным запросом.

Если это обычный запрос, он делает: redirect()->back() с сообщениями проверки в сеансе.

Если это запрос ajax, он показывает объект json с сообщениями проверки в нем.

Фреймворки/библиотеки внешнего интерфейса, такие как, например, jQuery, добавляют заголовок к запросу ajax, чтобы бэкэнд знал, что это запрос ajax. Laravel проверяет этот заголовок, чтобы решить, что делать (используя методы isAjax или wantsJson).

Почтальон не отправляет этот заголовок автоматически. Таким образом, вы должны добавить один из следующих заголовков вручную:

Accept: application/json

X-Requested-With: XMLHttpRequest

Вот скриншот почтальона в качестве примера:

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

person Björn    schedule 30.08.2016
comment
Я добавил скриншот приложения типа контента json. Можете ли вы проверить это в моем обновленном вопросе? - person Pankaj; 31.08.2016
comment
Могу ли я спросить местоположение в Framework для форматирования сообщения json? Я хочу изменить это, чтобы показать сообщение более подробно. - person Pankaj; 31.08.2016
comment
Я добавил скриншот. Вы можете редактировать сообщения проверки, добавив public function messages() в файл RoleRequest, например: laravel.com/docs/master/ - person Björn; 31.08.2016
comment
Нет, я прошу прощения. Я имел в виду, я получаю это как результат json. {"Role":["The role must be at least 4 characters."]} а вместо этого я хотел вот так {"Result":{"Data":null,"ErrorMessage":["The role must be at least 4 characters."],"Success":false}} - person Pankaj; 31.08.2016
comment
Это довольно сложно сделать, так как вам нужно переопределить способ, которым laravel обрабатывает эти запросы проверки. Было бы проще переместить часть проверки в контроллер и отформатировать свой собственный вывод, а затем вернуть его как json, например: laravel.com/docs/5.3/validation#manually-creating-validators - person Björn; 31.08.2016
comment
Я не могу ничего написать в определении действия контроллера, потому что класс запроса передается как параметр в методе действия. Код проверки находится в классе Request. - person Pankaj; 31.08.2016
comment
Вот почему я предлагаю вам удалить класс проверки запроса и переместить часть проверки в контроллер для большего контроля над выводом для этого варианта использования. - person Björn; 31.08.2016