О web-разработке
и даже немного больше...

Валидация данных в Laravel 8.x

Валидация данных полей, отправляемых на сайте, парой является востребованной необходимостью. Во-первых, это вопрос безопасности вашего сайта, во-вторых целостность данных отправляемых пользователями. В 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.

  • authorize – сообщает о надобности проверки авторизации пользователя при отправке, доступные значения true либо false;
  • 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

Опубликован: 15.03.2021 г.

См. также:

Ограничение параметров в маршрутах Laravel
Необязательные параметры маршрутов в Laravel
Как выбрать записи за определённый период (День, Месяц, Год) в Laravel?
Использование метода leftJoin() для выборки из нескольких таблиц в Laravel
Как просмотреть SQL запрос в Eloquent Laravel?
Как объявить переменную в шаблоне Laravel Blade?
Проверка на пустоту коллекций Eloquent в Laravel
Как получить URL текущей страницы в Laravel?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта