スポンサーリンク

[Laravel] 基本的なバリデーションチェックとエラー表示

概要

フォーム入力のバリデーションチェックを行い、入力内容が不正であった場合に、エラーメッセージを表示させていきます。

実践

コントローラー

    public function receive(Request $request){
        $request->validate([
            'name' => 'required|max:32',
            'age' => 'required|numeric'
        ]);
        return view('receive');
    }

テンプレート

<html>
<body>
    @if ($errors->any())
    <ul>
        @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
    @endif
    <form method="POST" action="/receive">
        @csrf
        <table>
            <tr>
                <td>名前:</td>
                <td><input type="text" name="name" /></td>
            </th>
            <tr>
                <td>年齢:</td>
                <td><input type="text" name="age" /></td>
            </th>
            <tr>
                <td></td>
                <td><input type="submit" name="submit" value="送信" /></td>
            </tr>
        </table>
</body>
</html>

実行結果

送信内容

送信結果

解説

バリデーションルールの設定

        $request->validate([
            'name' => 'required|max:32',
            'age' => 'required|numeric'
        ]);

フォームのname属性で設定したname, ageの入力内容に対して、入力チェックを行い、不正であれば、自動的に入力フォームのページに戻す処理を行っています。

requiredは必須チェック、max:32は文字数最大チェック、numericは整数チェックをしています。
Laravelには、これら以外にも多くのルールが定義されていますが、自分でルールを作ることもできます。

不正だった場合、エラーデータをセッション保存して、入力フォームの画面に自動的に戻ります。

エラーメッセージの表示

    @if ($errors->any())
    <ul>
        @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>

$errors変数は、バリデーションエラーが発生すると、ミドルウェアによって自動的に定義されます。
$errors->any()で、エラーが存在するかチェックし、allメソッドでエラーメッセージの配列を呼び出して、表示させることができます。