Laravel 5. 5 вывод ошибок валидации для API

Получить код ошибки laravel

Laravel является очень удачным инструментом для написания собственного API. В этом фреймворке уже предусмотрено всё для простой разработки API. К сожалению, ошибки в приложении бывают часто, и, потому, важно знать, как их можно обработать и изменить формат вывода. В этой статье я покажу, как можно кастомизировать вывод ошибок валидации, и отдавать в удобном для нас формате, в JSON.

Использование форм-реквестов позволяет вынести отвественность валидации данных в отдельный класс. Однако, теперь, когда валидация запроса переложена на отдельный класс, то и обработка ошибок производится в нём же. И, иногда, стандартного поведения обработки ошибок валидации оказывается недостаточно, потому и появляются подобные статьи.

Чтобы вы понимали, о чём я сейчас говорю, например, при отправке запроса к API, ошибки валидации придут в подобном формате:
error-default-form-request

Обработка исключений из единого места

Изначально этот метод содержит код:

Но можно его немного модифицировать, добавив правило: если приходит AJAX запрос, или запрос содержит заголовок Accept: application/json, то, отправим ответ в формате JSON

В результате, получим ответ, который не показывает все ошибки валидации. В этом случае при любой из ошибок всегда будет одно сообщение "The given data was invalid." (в случае валидации):
habdler. php

Но, как я писал выше, можно отловить исключения только определённого типа. В данном случае, нас интересуют только исключения валидации, экземпляра ValidationException.

В этом коде мы проверяем, является ли объект исключения экземпляром ValidationException, который как раз и содержит в себе информацию об ошибках валидации.validation

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

Вынесение логики обработки исключений в отдельный Form Request

Гораздо лучше было бы создать правила, примениемые только к некоторым форм-реквестам. И, мы можем это сделать.

Для этого, в папке app/Http/Requests создадим свою реализацию FormRequest-класса, который будет возвращать ошибки валидации в JSON-е:

И теперь, любой FormRequest-класс, в котором нужен вывод ошибок в JSON, наследуем от этого класса, например:

И в итоге, получим данные в формате:
api-form-request

В версиях Laravel ниже 5.5, метод называется response а не failedValidation.

Резюме

В этой статье я показал, как кастомизировать Laravel FormRequest валидацию. Так же, на примере, показал, как сделать вывод ошибок валидации при API запросах. Здесь был рассмотрен базовый подход по тому, как можно изменить формат вывода исключений в Laravel. И, так же, по примеру, вы с легкостью сможете реализовать любой формат вывода, который нужен.

Валидация в Laravel с примерами

Валидация в Laravel с примерами

Сегодняшняя тема – это инструкция по валидации в Laravel с примерами. Laravel фреймворк предоставляет множество различных способов валидации данных Вашего приложения. По умолчанию базовый контроллер Laravel использует трейт ValidateRequests, который обеспечивает удобный способ валидации входящего HTTP-запроса с помощью множества правил валидации.

Мы можем использовать валидацию в Laravel по-разному: либо внутри метода контроллера, либо с помощью класса FormRequest для валидации входящих запросов. В этом уроке мы рассмотрим все способы валидации в Laravel.

Первый шаг – установите последнею версию Laravel с помощью следующей команды.

Перейдите в папку проекта и откройте его в вашем IDE или редакторе кода.

Создайте файл FormController. php, используя следующую команду.

Создайте два метода внутри файла FormController. php.

Теперь напишите два маршрута в файле routes/web. php.

Создайте модель и файл миграции, используя следующую команду.

Напишите следующий код в файле миграции [timestamp] _create_forms_table. php, который находится в папке database/migrations.

Теперь, для того чтобы создать таблицу, запустите миграции командой:

Внутри папки resources/views, создайте файл layout. blade. php и добавьте в него следующий код.

Теперь в той же папке resources/views создайте файл с именем create. blade. php и добавьте в него следующий код.

Теперь, внутри контроллера FormController. php напишите функцию create().

Создание формы на Laravel

Написание логики валидации

Теперь мы можем написать логику валидации внутри функции store() из контроллера FormController.

Как видите, мы передали нужные правила валидации в метод validate(). Если валидация не пройдена, то ошибка сгенерируется автоматически. Если валидация пройдена, наш контроллер продолжит работу и сохранит данные в базе данных, и мы получим ответ в формате json.

Если мы отправим форму с пустыми полями, то мы в ответ получим ошибки.

Вывод ошибок валидации в Laravel

Остановка после первой неудачной проверки

Иногда может потребоваться остановить выполнение правил после первой неудачной проверки. Для этого, в правилах валидации, назначьте атрибут bail.

Отображение ошибок валидации

Laravel автоматически перенаправляет пользователя на предыдущую страницу. Кроме того, все ошибки валидации будут автоматически перенесены во флеш-переменные сессии.

Обратите внимание, что нам не нужно специально привязывать сообщения об ошибках к шаблону в нашем маршруте GET. Это потому, что Laravel будет проверять наличие ошибок в данных сессий и автоматически привязывать их к шаблону, если они доступны.

Проверяем, существуют ли ошибки в сессии, и выводим их на экран. Данный код добавляем внутри файла create. blade. php, в том месте где хотим, чтобы отображались ошибки.

Валидация через Form Request в Laravel

В приведенном выше примере мы написали правила валидации внутри контроллера. Но, мы также можем создать отдельный файл для написания правил валидации.

Для более сложных сценариев валидации Вы можете создать так называемые form requests. Form requests – это специальные классы, которые содержат логику валидации. Для создания класса form request, используйте Artisan-команду make: request.

В папке app/Http/Requests будет создан файл с именем FieldRequest. php.

Давайте добавим несколько правил валидации в методе rules().

Если Вы планируете использовать логику авторизации в другом месте Вашего приложения, верните true из метода authorize().

Итак, теперь Вам не нужно переписывать эти правила внутри метода store(), из контроллера FormController. php.

Вам необходимо импортировать пространство имен FieldRequest в файл FormController. php и передать FieldRequest в качестве инъекцию зависимости внутри функции store().

Если валидация не пройдена, будет сгенерирован ответ на переадресацию, чтобы вернуть пользователя на предыдущую страницу. Сообщения об ошибках будут сохранены в флеш-переменных сессии, таким образом делая их доступными для отображения.

Настройка сообщений об ошибках

Вы можете настроить сообщения об ошибках, используемые form request, с помощью метода messages. Этот метод должен возвращать массив пар атрибутов / правил и соответствующие сообщения об ошибках.

Сохраните файл и снова отправьте форму без каких-либо значений, и Вы увидите эти сообщения об ошибках вместо используемых по умолчанию.

Изменение стандартных ошибок валидации в laravel

Создание валидаторов вручную

Если Вы не хотите использовать метод validate(), то Вы можете создать экземпляр валидатора вручную с помощью фасада Validator. Метод make() создает новый экземпляр валидатора.

Это даст нам тот же результат. Если Вы хотите создать экземпляр валидатора вручную, но в то же время воспользоваться автоматической переадресацией, Вы можете вызвать метод validate() в существующем экземпляре валидатора.

Для дополнительной информации о валидации, смотрите официальную документацию к Laravel.

На этом все, статья по валидации в Laravel 5.8 с примерами завершена.

Понравилась статья?

Тогда поделитесь ею с друзьями и подпишитесь на новые интересные статьи.

Источники:

https://badcode. ru/laravel-5-5-vyvod-oshibok-validatsii-dlia-api/

https://sozdatisite. ru/laravel/validaciya-v-laravel-s-primerami

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: