Laravel: отдаем ошибки валидатора в JSON

Опубликовано 0 комментариев 3261 просмотров
Laravel: отдаем ошибки валидатора в JSON

Привет.

Использование наследников Illuminate\Foundation\Http\FormRequest - один из спобов проверить данные на валидность перед тем, как начать с ними работу. Информация об ошибках возвращается клиенту в том виде, который удобен для него по мнению фреймворка.

Проблема в том, что решения фреймворка не всегда являются правильными. Самый простой пример, с которым мне пришлось столкнуться, - при написании API по стандарту REST, обрабатывая данные отправленные методом GET, фреймворк сохранял ошибки в сессию и отправлял клиента на главную страницу. Все бы ничего, но я всегда отдаю пользователю JSON :)

Решение на стороне клиента, - указать заголовок Accept: application/json, - по понятным причинам не подходит. Необходимо заставить фреймворк всегда отдавать массив JSON с ошибками. Поэтому откроем необходимый наследник Illuminate\Foundation\Http\FormRequest и перепишем один из методов.

use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\JsonResponse;

/**
 * @param Validator $validator
 */
protected function failedValidation(Validator $validator)
{
    throw new HttpResponseException(
        new JsonResponse($validator->errors(), 422)
    );
}

Теперь всегда при работе валидатора в случае наличия ошибок ответ клиенту вернется в JSON. Удачи.

В ответ на сообщение

Доступна разметка Markdown. А еще вы можете использовать крутой пак эмоций.

Нажимая на кнопку «Отправить» вы даете свое согласие на обработку персональных данных в соответствии с законом №152-ФЗ «О персональных данных» от 27.07.2006 и принимаете условия Политики конфеденциальности.