🔍
【Laravel8】バリデーションとエラーメッセージ表示
「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