Laravelのバリデーションの基本【個人的なお勉強アウトプット】


参考図書

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

ValidateRequestsというコントローラクラスにあるメソッドを利用する。

app/Http/Controllers/HelloController.php
public function post(Request $request){
$validate_rule = [
            'name' => 'required',
            'mail' => 'email',
            'age' => 'numeric|between:0,150',
        ];
$this->validate($request, $validate_rule);
}

validateアクションメソッドは配列の形で、項目名、検証ルールをセットする。
検証ルールが複数ある場合は|でつなぐ。

ルートの設定

routes/web.php
Route::post('hello', 'App\Http\Controllers\HelloController@post');

ビューでエラーメッセージの表示

resources/views/hello/index.blade.php
@section('content')
    <p>{{$msg}}</p>
    @if(count($errors) > 0)
    <p>入力に問題があります。再入力してください。</p>
    @endif
    <form action="/hello" method="post">
        <table>
            @csrf
            //hasはエラーが発生しているかをチェックするメソッド
            @if($errors->has('name'))
                        
                        //firstというメソッドは指定した項目の最初のエラーメッセージを取得するもの
            <tr><th>ERROR</th><td>{{$errors->first('name')}}</td></tr>
            @endif
                        //oldメソッドで引数に指定した入力項目の前回送信した値を返す
            <tr><th>name: </th><td><input type="text" name="name" value="{{old('name')}}"></td></tr>
            @if($errors->has('mail'))
            <tr><th>ERROR</th><td>{{$errors->first('mail')}}</td></tr>
            @endif
            <tr><th>mail: </th><td><input type="text" name="mail" value="{{old('mail')}}"></td></tr>
            @if($errors->has('age'))
            <tr><th>ERROR</th><td>{{$errors->first('age')}}</td></tr>
            @endif
            <tr><th>age: </th><td><input type="text" name="age" value="{{old('age')}}"></td></tr>
            <tr><th></th><td><input type="submit" value="send"></td></tr>
        </table>
    </form>
@endsection

$errorsはバリデーションで発生したエラーメッセージをまとめて管理するオブジェクト。バリデーション機能によって勝手に組み込まれる。

エラーメッセージを取得するメソッド

メソッド 内容
all すべてのエラーメッセージを配列で取得
first 指定した項目の最初のエラーメッセージを文字列で取得
get 指定した項目の最初のエラーメッセージすべてを配列で取得

getの使い方はfirstと同じで$変数 = $errors->get('項目名');