Laravel7 バリデーション機能の使い方

Laravel7でフォームから送信されたリクエストデータにバリデーションをかける方法を記述してます。
環境
- OS windows10 pro 64bit
- Composer 1.10.5
- PHP 7.4.5
- MariaDB 10.4.12
- Laravel Framework 7.6.2
※windows10に Laravel のインストールはこちら
※windows10に Composer のインストールはこちら
※windows10に PHP のインストールはこちら
※windows10に MariaDB のインストールはこちら
bootstrap導入
レイアウトにbootstrapを利用しているので、詳しい手順はこちらに記述してますが、下記のコマンドで利用可能にしてます。
1 2 3 |
composer require laravel/ui php artisan ui bootstrap npm install && npm run dev |
入力フォーム用コントローラー作成
まずはテスト用の入力フォームを作成していきます。
「NameController」という名前でコントローラーを作成します。
1 |
php artisan make:controller NameController |
app/Http/Controllers/ NameController.phpが生成されているので、
formメソッドとバリデーションと確認用のshowメソッドを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class NameController extends Controller { public function form() { return view('name.form'); } public function show(Request $request) { // validatorを作成 $validatedData = $request->validate([ //required(必須)|min:2(最小2文字)|max:10(最大10文字) 'name' => 'required|min:2|max:10', ]); $name = array( 'name' => $request->input('name'), ); return view('name.show', $name); } } |
入力フォーム用ビュー作成
次にレイアウト部であるviewを作成します。
resources\views内で「name」というフォルダを作成して「form.blade.php」を下記の内容で、新たに作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<!doctype html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>入力フォーム</title> <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet"> <link href="{{ asset('css/app.css') }}" rel="stylesheet"> </head> <body> <div class="mx-auto" style="margin-top: 100px; width: 800px;"> @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form method="POST" action="/name/show"> @csrf <div class="form-group"> <label>名前</label> <input type="text" class="form-control" name="name" value="{{ old('name') }}"> </div> <input type="submit" class="btn btn-primary mb-2" value="送信"> </form> </div> </body> </html> |
@csrf は Bladeテンプレート機能の1つで、CSRF対策となります。
下記のコードがerrorメッセージを表示する箇所となります。
1 2 3 4 5 6 7 8 |
@if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> |
oldは、入力エラー時の値を取得することができます。
1 |
{{ old('name') }} |
次に resources\views\name内でリクエストデータ取得用の「show.blade.php」を下記の内容で、新たに作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<!doctype html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>入力フォーム表示</title> <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet"> <link href="{{ asset('css/app.css') }}" rel="stylesheet"> </head> <body> <div class="mx-auto" style="margin-top: 100px; width: 800px;"> <div class="form-group"> <label>名前 {{ $name }}</label> </div> </div> </body> </html> |
ルーティング追加
アクセスするURLを設定するため、ルーティングを記述します。
ここでは/nameに設定します。
1 2 |
Route::get('/name', 'NameController@form'); Route::post('/name/show', 'NameController@show'); |
確認
ブラウザから http://localhost:8000/name にアクセスしてみて、バリデーションが有効になっていることが確認できます。

-
前の記事
Dockerを使ってブログに特化した軽量なCMS「ghost」を構築する 2020.05.19
-
次の記事
CentOs8 Deno(ディーノ)をインストールして実行する 2020.05.20
コメントを書く