🔍

【Laravel8】バリデーションとエラーメッセージ表示

2021/05/17に公開

「Laravelで入力値にバリデーションをし、エラーであればエラーメッセージを表示する」ということをやりたい。

Laravelでのバリデーションは結構楽にできた👏

自分用のメモ
それでは書いていきますね〜

バリデーションとは

カタカナ用語が覚えられないので、毎回忘れちゃうから一応書いとく。

「入力されたデータが決められた条件や形式に対して妥当かどうか」

文字数とか、入力された値のデータ型の検証とかでよく使うやつ的な🤔

【参考↓】
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
IT用語辞典

Laravelでバリデーション

この記事ではフォームの入力値チェックのことをバリデーションと表すことにします。

早速いきましょう。
今回はフォームの入力欄にアイテム名を入力して、それを保存する処理みたいなのをやっていけたらなと思います。

  • フォーム
index.blade.php
<form action="{{ route('store.item') }}" method="POST">
@csrf

    <input type="text" name="item_name">

    <input type="submit">
</form>

-ルート

web.php
Route::post('/item', [ItemController::class, 'StoreItem'])->name('store.item');
  • コントローラー
ItemController.php
public function StoreItem(Request $request)
{
    // -バリデーションの内容-
    // ・入力されてる? 
    // ・フォームからの値はDBの対応するカラムの値と同じではない?
    // ・入力値は255文字以内?
    // -バリデーションの内容-
    $validated = $request->validate([
        'item_name' => 'required|unique:items|max:255',
    ],
    [
        'item_name.required' => 'アイテム名を入力してください',
        'item_name.unique' => 'アイテム名を被らないように入力してください',
        'item_name.max' => '最大255文字まで',
    ]);
    
    $item = new Item();
    
    $item_name = $request->item_name;
    
    //DBに保存
    $item->save();
    
    //リダイレクト - itemの保存が完了したらサクセスメッセージと一緒にリダイレクト
    return redirect(route('all.items'))->with('success', 'アイテムの保存完了');
}

バリデーションのルールを満たさずにエラーになってしまったら、前の場所に自動的にリダイレクトされる。
その時に、全てのバリデーションエラーは自動的にセッションの中に入れられる。

  • ビュー(バリデーションエラーの表示)
index.blade.php
@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
           @foreach ($errors->all() as $error)
              <li>{{ $error }}</li>
           @endforeach
        </ul>
    </div>
@endif

$errors変数はミドルウェアによって、今作っているLaravelアプリケーションの全てのviewに共有されている。

終わり〜

Discussion