LaravelでフォームバリデーションエラーをBladeに表示する方法
生徒
「先生、Laravelでフォームの入力チェックに失敗した場合、エラーを画面に表示する方法はありますか?」
先生
「はい、あります。LaravelではControllerでバリデーションを行った後、Bladeテンプレートにエラーメッセージを簡単に表示できます。」
生徒
「具体的にはどのように書くんですか?」
先生
「それでは、ステップごとに見ていきましょう!」
1. バリデーションエラーとは?
バリデーションエラーとは、フォームの入力がルールに沿っていない場合に発生するエラーです。例えば、名前の入力が必須なのに空欄だったり、メールアドレス欄にメール形式ではない文字列が入っていた場合です。これを画面上でユーザーに知らせることで、正しい情報を入力してもらいやすくなります。
2. Controller側でのバリデーション
まず、Controllerでバリデーションを行います。Laravelでは$request->validate()を使うと、入力値のチェックと自動リダイレクトができます。
use Illuminate\Http\Request;
public function store(Request $request) {
$validated = $request->validate([
'name' => 'required|max:50',
'email' => 'required|email'
]);
// バリデーションを通った場合の処理
}
この例では、nameが必須で最大50文字、emailが必須かつメール形式であることを確認しています。バリデーションに失敗すると、自動的に元のフォームにリダイレクトされます。
3. Bladeでエラーメッセージを表示する方法
Controllerでバリデーションが失敗した場合、エラー情報は$errorsという変数に自動的に格納されます。Bladeでは$errors->any()でエラーがあるか確認し、$errors->all()で全てのエラーメッセージを取得して表示できます。
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
このコードをフォームの上部に配置すると、ユーザーが入力ミスした内容を分かりやすく表示できます。
4. 特定の入力欄に紐づけてエラーを表示する
全体のエラーだけでなく、特定のフォーム項目ごとにエラーメッセージを表示することもできます。例えば、名前入力欄にエラーがある場合は次のように書きます。
<input type="text" name="name" value="{{ old('name') }}">
@error('name')
<div class="text-danger">{{ $message }}</div>
@enderror
@error('name')から@enderrorの間に書いた内容は、そのフィールドにエラーがある場合のみ表示されます。{{ $message }}には自動的に該当のエラーメッセージが入ります。
5. old()関数と組み合わせて入力値を保持する
フォームを再表示する際にユーザーが入力した値を保持するには、old()関数を使います。これにより、入力ミスがあってもユーザーは再入力の手間を省けます。
<input type="text" name="name" value="{{ old('name') }}">
<input type="email" name="email" value="{{ old('email') }}">
エラーがあった場合も、前回入力した値を自動で復元して表示することができるので、ユーザー体験が向上します。
6. 便利なポイント
- Controller側で
validate()を使うと簡単にバリデーションが可能 - Bladeでは
$errorsや@errorを使ってエラー表示ができる old()関数で再入力の手間を軽減できる- Bootstrapの
alertクラスなどを組み合わせると、エラー表示を視覚的に分かりやすくできる
これらを活用することで、Laravelで安全で使いやすいフォームを作成できます。