カテゴリ: Laravel 更新日: 2025/12/05

LaravelでフォームバリデーションエラーをBladeに表示する方法

LaravelでフォームバリデーションエラーをBladeに表示する方法
LaravelでフォームバリデーションエラーをBladeに表示する方法

先生と生徒の会話形式で理解しよう

生徒

「先生、Laravelでフォームの入力チェックに失敗した場合、エラーを画面に表示する方法はありますか?」

先生

「はい、あります。LaravelではControllerでバリデーションを行った後、Bladeテンプレートにエラーメッセージを簡単に表示できます。」

生徒

「具体的にはどのように書くんですか?」

先生

「それでは、ステップごとに見ていきましょう!」

1. バリデーションエラーとは?

1. バリデーションエラーとは?
1. バリデーションエラーとは?

バリデーションエラーとは、フォームの入力がルールに沿っていない場合に発生するエラーです。例えば、名前の入力が必須なのに空欄だったり、メールアドレス欄にメール形式ではない文字列が入っていた場合です。これを画面上でユーザーに知らせることで、正しい情報を入力してもらいやすくなります。

2. Controller側でのバリデーション

2. Controller側でのバリデーション
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でエラーメッセージを表示する方法

3. Bladeでエラーメッセージを表示する方法
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. 特定の入力欄に紐づけてエラーを表示する

4. 特定の入力欄に紐づけてエラーを表示する
4. 特定の入力欄に紐づけてエラーを表示する

全体のエラーだけでなく、特定のフォーム項目ごとにエラーメッセージを表示することもできます。例えば、名前入力欄にエラーがある場合は次のように書きます。


<input type="text" name="name" value="{{ old('name') }}">
@error('name')
    <div class="text-danger">{{ $message }}</div>
@enderror

@error('name')から@enderrorの間に書いた内容は、そのフィールドにエラーがある場合のみ表示されます。{{ $message }}には自動的に該当のエラーメッセージが入ります。

5. old()関数と組み合わせて入力値を保持する

5. old()関数と組み合わせて入力値を保持する
5. old()関数と組み合わせて入力値を保持する

フォームを再表示する際にユーザーが入力した値を保持するには、old()関数を使います。これにより、入力ミスがあってもユーザーは再入力の手間を省けます。


<input type="text" name="name" value="{{ old('name') }}">
<input type="email" name="email" value="{{ old('email') }}">

エラーがあった場合も、前回入力した値を自動で復元して表示することができるので、ユーザー体験が向上します。

6. 便利なポイント

6. 便利なポイント
6. 便利なポイント
  • Controller側でvalidate()を使うと簡単にバリデーションが可能
  • Bladeでは$errors@errorを使ってエラー表示ができる
  • old()関数で再入力の手間を軽減できる
  • Bootstrapのalertクラスなどを組み合わせると、エラー表示を視覚的に分かりやすくできる

これらを活用することで、Laravelで安全で使いやすいフォームを作成できます。

カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.7
Java&Spring記事人気No7
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド
No.8
Java&Spring記事人気No8
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)