Валидация данных полей, отправляемых на сайте, парой является востребованной необходимостью. Во-первых, это вопрос безопасности вашего сайта, во-вторых целостность данных отправляемых пользователями. В Laravel существуют специальные методы и классы для этих целей. И типичные проверки полей доступны в Laravel уже по умолчанию.
Давайте рассмотрим примеры, как мы можем выполнять валидацию данных, отправляемых HTTP-запросом. Ранее мы уже рассматривали возможность работы с HTTP-запросами из метода контроллера. И за основу мы возьмём тот же класс контроллера – ContactController, в котором есть метод submit(). Этому методу передаётся объект $req класса Request с данными запроса.
Выполнить валидацию полей мы можем обратившись в методу validate(), который доступен в данном объекте. Соответственно, файл контроллера, который мы создавали в предыдущем посту, расположен по пути:
\app\Http\Controllers\ContactController.php
В нём, мы пропишем простые правила валидации полей, данные которых к нам поступают из формы.
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class ContactController extends Controller { // public function submit(Request $req){ $validate = $req->validate([ 'person-name' => 'required|min:2|max:60', 'email' => 'required|min:2|max:50', 'message' => 'required|min:2|max:500' ]); } } ?>
Как вы можете заметить, методу validate() передаётся массив с данными, где в качестве ключа указаны имена полей на форме, а значения – параметры валидации, которым должны соответствовать эти поля. Т.е. required – сообщает, что поле является обязательным, min – задаём минимальное количество символов, max – задаёт максимальное количество символов. Условий, в самом деле, гораздо больше, про все из них вы сможете почитать в официальной документации (см. ссылку под постом).
Важно не только проверить поля, но и сообщить пользователю о наличии ошибок. Для этого в шаблоне сайта необходимо сделать вывод ошибок через встроенную переменную $errors.
@if($errors->any()) <div class="aler alert-danger"> <ul> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
Таким образом, отправляя поля с формы, они будут проверяться согласно указанным правилам, и выводиться сообщения об ошибках, если они указаны некорректно. В самом деле проверка полей в Laravel может производиться более гибко. В веб-фреймворке Laravel есть такое понятие как файл валидации. Далее поговорим о том, что это и как его можно использовать.
Файлы валидации представляют из себя класс, с набором определённых методов. Основная задача этого класса – настройка правил валидации, а также настройка текста сообщений об ошибках. В самом деле возможностей там предостаточно. Итак, давайте создадим класс валидации. Для этого, привычным образом, мы можем воспользоваться консольным приложением artisan который доступен в терминале, относительно папки проекта Laravel.
Создание файла валидации
php artisan make:request ContactRequest
В результате выполнения команды мы создаём файл \app\Http\Requests\ContactRequest.php в папке, где по умолчанию будут находиться все классы файлов валидации. В этом файле будет создан класс с аналогичным названием ContactRequest, и в нём будет три ключевых метода это authorize, rules и messages.
В результате, в качестве простого примера приводим класс валидации к такому виду:
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class ContactRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'person-name' => 'required|min:2|max:60', 'email' => 'required|min:2|max:50', 'message' => 'required|min:2|max:500' ]; } /* Возможность смены атрибутов полей */ public function attributes(){ return [ 'person-name' => 'имя', ]; } /* Сообщения для полей */ public function messages(){ return [ 'person-name.required' => 'Вы не указали ваше имя.', 'email.required' => 'Вы не указали ваш Email.', 'message.required' => 'Вы не указали текст сообщения.' ]; } }
В этом случае, в самом файле контроллера, нужно лишь указать для параметра метода submit() класс валидации ContactRequest:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests\ContactRequest; // использует пространство имён ContactRequest class ContactController extends Controller { // указываем ContactRequest в качестве класса параметра public function submit(ContactRequest $req){ // } }
Когда проект будет существенно разрастаться, все правила валидации полей у вас будут доступны в отдельной директории, что весьма удобно для сопровождения. Кроме того, это избавляет контроллеры он лишнего дополнительно кода, для валидации. В официальной документации более подробно расписаны все тонкости работы с валидацией данных.
https://laravel.com/docs/8.x/validation