Урок по валидации формы в Laravel 8 с примером

В этом руководстве мы рассмотрим обработку форм и разберем вывод сообщений об ошибках в Laravel. В приведенном ниже примере мы будем использовать стандартные правила валидации Laravel – такие как required, unique, numeric. Сообщения об ошибках в каждом из полей формы будут добавляться в файл шаблонизатора Blade с помощью метода has().

Рассмотрим поэтапно, как создать контроллер для отправки сообщений об ошибках, и как отобразить их в шаблоне Blade.

Шаг 1: создаем маршруты

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

<?php
  
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PDFController;

Route::get('post', [PostController::class, 'create'])->name('post');
Route::post('post', [PostController::class, 'store'])->name('generate-pdf');

Шаг 2: создаем контроллер

Теперь мы создадим контроллер и добавим методы, как показано ниже. Один метод отвечает за вывод шаблона Blade по запросу GET, второй через запрос POST отображает результаты валидации.

<?php
  
namespace App\Http\Controllers;
  
use Illuminate\Http\Request;
use App\Post;
  
class PostController extends Controller
{
    /**
     * Вывод панели управления приложения.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('create_post');
    }
  
    /**
     * Вывод панели управления приложения.
     *
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([
           'title' => 'required|unique:posts|max:255',
           'discription' => 'required',
        ]);
   
        Post::create($request);
    
        return back()->with('success', 'Post created successfully.');
    }
}

Шаг 3: создаем шаблон Blade

Теперь создадим файл create_post.blade.php, в котором вместе с кодом темы Bootstrap разместим обработку сообщений об ошибках на Laravel. Данный файл в нашем примере находится здесь – resources/views/create_post.blade.php.

<!DOCTYPE html>
<html>
<head>
    <title>Laravel form validation example - codingdriver.com</title>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container">
  
        <h1>Пример валидации данных в форме Laravel</h1>
   
        @if(Session::has('success'))
        <div class="alert alert-success">
            {{ Session::get('success') }}
            @php
                Session::forget('success');
            @endphp
        </div>
        @endif
   
        <form method="POST" action="{{ route('post') }}">
  
            {{ csrf_field() }}
  
            <div class="form-group">
                <label>Title:</label>
                <input type="text" name="title" class="form-control" placeholder="Name">
                @if ($errors->has('title'))
                    <span class="text-danger">{{ $errors->first('title') }}</span>
                @endif
            </div>
    
            <div class="form-group">
                <strong>Discription:</strong>
                <textarea name="discription" class="form-control" placeholder="Discription"><textarea>
                @if ($errors->has('discription'))
                    <span class="text-danger">{{ $errors->first('discription') }}</span>
                @endif
            </div>
   
            <div class="form-group">
                <button class="btn btn-success btn-submit">Submit</button>
            </div>
        </form>
    </div>
</body>
</html>

Файл вывода сообщений об ошибках на Laravel и Blade готов, его можно проверять в браузере.

Пожалуйста, оставьте свои отзывы по текущей теме материала. Мы крайне благодарны вам за ваши комментарии, дизлайки, отклики, подписки, лайки!

Данная публикация является переводом статьи «Laravel 8 Validation Error Messages Tutorial with Example» , подготовленная редакцией проекта.

Меню