Меню Закрыть

Валидация Laravel 8

Что такое валидация и для чего она нам нужна?

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

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

О валидации (validation) Laravel 8 , вы можете более подробно ознакомиться тут

Давайте теперь вернёмся к нашему приложению example-app. В шаблоне task.blade.php мы с вами реализовали форму, которая отправляла данные о задаче (её название, описание) в функцию SaveTask контроллера TaskController.

Форма в шаблоне task.blade.php :

				
					<form method="POST" action="{{route('save_task')}}">
                            @csrf
                            {{--Токен - обязательно нужно использовать в формах отправки данных--}}
                            <div class="form-group row">
                                <label class="col-md-4 col-form-label text-md-right">Название задания</label>
                                <div class="col-md-6">
                                    <input type="text" class="form-control" name="name_task" required>
                                </div>
                            </div>
                            <div class="form-group row">
                                <label class="col-md-4 col-form-label text-md-right">Описание</label>
                                <div class="col-md-6">
                                    <input type="text" class="form-control" name="desc" required>
                                </div>
                            </div>
                            <div class="form-group row mb-0">
                                <div class="col-md-8 offset-md-4">
                                    {{--Кнопка--}}
                                    <button type="submit" class="btn btn-primary">
                                        Сохранить
                                    </button>
                                </div>
                            </div>
 </form>
				
			

Функция  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 дожна называться так же--}}
    <div class="container mb-2">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">Задание</div>
                    <div class="card-body">
                        {{--Вывод сообщения об успешной записи данных в БД--}}

                        @if(session('success'))
                            <div class="alert alert-success">
                                {{session('success')}}
                            </div>
                        @endif

                        {{--Вывод сообщения о успешной записи данных в БД--}}

                        {{--Вывод сообщения ошибки--}}
                        @if (count($errors) > 0)
                            <div class="alert alert-danger">
                            {{--Выводим все имеющиеся ошибки validation--}}
                                @foreach ($errors->all() as $error)
                                    <p>{{ $error }}</p>
                                @endforeach
                            </div>
                        @endif
                        {{--Вывод сообщения ошибки--}}
                        {{--Начало формы--}}
                        <form method="POST" action="{{route('save_task')}}">
                            @csrf
                            {{--Токен - обязательно нужно использовать в формах отправки данных--}}
                            <div class="form-group row">
                                <label class="col-md-4 col-form-label text-md-right">Название задания</label>
                                <div class="col-md-6">
                                    <input type="text" class="form-control" name="name_task" required>
                                </div>
                            </div>
                            <div class="form-group row">
                                <label class="col-md-4 col-form-label text-md-right">Описание</label>
                                <div class="col-md-6">
                                    <input type="text" class="form-control" name="desc" required>
                                </div>
                            </div>
                            <div class="form-group row mb-0">
                                <div class="col-md-8 offset-md-4">
                                    {{--Кнопка--}}
                                    <button type="submit" class="btn btn-primary">
                                        Сохранить
                                    </button>
                                </div>
                            </div>
                        </form>
                        {{--Конец формы--}}
                    </div>
                </div>
            </div>
        </div>
    </div>
    {{--И в конце не забываем закрыть нашу секцию--}}
    {{--Таблица задач--}}
    <table class="table table-bordered text-center">
        <tr>
            <th>Название задачи</th>
            <th>Описание</th>
            <th>Статус</th>
            <th>Опции</th>
        </tr>
        @foreach ($tasks as $task)
            <tr>
                <td>{{ $task->name_task }}</td>
                <td>{{ $task->desc }}</td>
                <td>{{ $task->status }}</td>
                <td><a class="btn btn-primary" href="{{route('edit_task',$task->id)}}">Редактировать</a>
                    <form method="post" action="{{route('delete_task',$task->id)}}" style="display:inline">
                        @csrf
                        @method('delete')
                        <button type="submit" class="btn btn-danger">Удалить</button>
                    </form>
                </td>
            </tr>
        @endforeach
    </table>
    {{--Таблица задач--}}
@endsection
				
			

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

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

Ваш адрес email не будет опубликован.

>