Что такое валидация и для чего она нам нужна?
Валидация — проверка корректности значений, параметров поступивших от пользователя. Валидация своего рода это условие, которое позволяет продолжить выполнение каких-либо функций или прекращает (останавливает) их выполнение, т.к. данные приходящие от пользователя не проходят проверку по заданным условиям.
Валидации используются для точной и корректной обработки данных, для того что бы исключить ошибочный (случайный) ввод данных пользователем. Тем самым валидация позволяет обезопасить наше приложение от лишних процессов и т.д.
О валидации (validation) Laravel 8 , вы можете более подробно ознакомиться тут.
Давайте теперь вернёмся к нашему приложению example-app. В шаблоне task.blade.php мы с вами реализовали форму, которая отправляла данные о задаче (её название, описание) в функцию SaveTask контроллера TaskController.
Форма в шаблоне task.blade.php :
Функция SaveTask контроллера TaskController :
public function SaveTask(Request $request)
{
$new_task = new Task();
$new_task->name_task = $request->input('name_task');
$new_task->desc = $request->input('desc');
$new_task->status = 'Action';
$new_task->save();
return redirect()->back();
}
Нас интересует данная функция, ведь именно в ней мы будем писать валидацию.
И так, мы знаем что в данную функцию приходят данные из полей name_task и desc, именно эти два поля мы и будем проверять. Напишем условия проверки, что данные поля должны быть обязательными (required) и укажем что максимально значение символов будет 5 (max: 5) :
public function SaveTask(Request $request)
{
$request->validate([
'name_task' => 'required|max:5', //обязательное поле, макс.символов 5
'desc' => 'required|max:5', //обязательное поле, макс.символов 5
]);
$new_task = new Task();
$new_task->name_task = $request->input('name_task');
$new_task->desc = $request->input('desc');
$new_task->status = 'Action';
$new_task->save();
return redirect()->back();
}
Запускаем локальный сервер «php artisan serve», переходим по ссылке http://127.0.0.1:8000.
Благодаря нашей валидации мы не можем записать в базу данных данные, если name_task и desc = null (пустое поле) и если мы введем в данные поля больше пяти символов.
Здесь можете посмотреть какие ещё можно писать условия для проверки Validation.
Если попробуете данный вариант и запишете в поля ввода больше пяти символов, то у вас просто обновиться страница. И никаких ошибок не будет, т.к. мы ещё их не писали, валидация работает, но она пока не говорит где происходит конфликт.
Давайте это исправим.
public function SaveTask(Request $request)
{
$request->validate([
'name_task' => 'required|max:5',
'desc' => 'required|max:5',
],[
"name_task.required" => "Поле 'Название задачи' является обязательным!",
"name_task.max" => "Поле 'Название задачи' ,максимальное колличество символов 5!",
"desc.required" => "Поле 'Описание' является обязательным!",
"desc.max" => "Поле 'Описание' ,максимальное колличество символов 5!",
]);
$new_task = new Task();
$new_task->name_task = $request->input('name_task');
$new_task->desc = $request->input('desc');
$new_task->status = 'Action';
$new_task->save();
return redirect()->back()->with('success', 'Задача сохранена успешно!'); // при успешной записи в БД задачи, возвращаем сообщение
}
Таким образом, мы написали какие сообщения будут возвращаться при ошибке.
С функцией закончили, давайте перейдём в наш шаблон task.blade.php.
Напишем перед нашей формой два вывода сообщений:
1. Вывод ошибок при валидации.
2. Вывод сообщения success — при успешной записи в БД данных.
@extends('layouts.app')
{{--Пишем папку и название файла, в который поместим контент из @section--}}
@section('content')
{{--Так как мы в файле app.blade.php использовали @yield('content') - с названием content то и section дожна называться так же--}}
Задание
{{--Вывод сообщения об успешной записи данных в БД--}}
@if(session('success'))
{{session('success')}}
@endif
{{--Вывод сообщения о успешной записи данных в БД--}}
{{--Вывод сообщения ошибки--}}
@if (count($errors) > 0)
{{--Выводим все имеющиеся ошибки validation--}}
@foreach ($errors->all() as $error)
{{ $error }}
@endforeach
@endif
{{--Вывод сообщения ошибки--}}
{{--Начало формы--}}
{{--Конец формы--}}
{{--И в конце не забываем закрыть нашу секцию--}}
{{--Таблица задач--}}
Название задачи
Описание
Статус
Опции
@foreach ($tasks as $task)
{{ $task->name_task }}
{{ $task->desc }}
{{ $task->status }}
Редактировать
@endforeach
{{--Таблица задач--}}
@endsection
Отлично, наше приложение выводит нам сообщения об ошибках и успешном добавлении записи. На данном примере мы рассмотрели простую валидацию. В дальнейшем в блоге мы встретим и более сложные валидации.