(Laravel) バリデーション【コントローラに記述する方法】

laravel-validation

 

Laravelのバリデーションに関してのメモ書き。
特に、コントローラに記述する方法について。

コントローラ以外に記述する方法については、下記記事で紹介しているので、参考に。

 

バリデーションとは

ユーザからの入力値が正しいかどうか、チェックすること。
悪意のある入力の場合、無効化する

 

バリデーションの使い方

基本的に、コントローラのアクションメソッド内に、
validate()メソッドを記述して、バリデーションする。

viewのフォームから送られてきた値を、controllerに記述したバリデーションでチェックする。

 

バリデーションの書き方

コントローラのアクション内に、validateメソッドを記述する。

$this->validate($rquest, [検証設定の配列])

 

validateメソッドは、Contorollerクラスのメソッド

第一引数には、ユーザからの入力値を$requestで指定し、
第二引数には、バリデーションの設定を記述した配列を指定する。

 

第二引数の配列(検証設定)の書き方

[
    '項目名' => '割り当てる検証ルール',
    '項目名' => '割り当てる検証ルール',
    ....略
]

 

項目名はフォームで送られてくる値のnameを指定する。
割り当てる検証ルールは、指定した項目にかけたいバリデーション名を指定する。

|(パイプ)で複数のバリデーションを繋げて指定することもできる。
以下例

//バリデーションあり

public function post(Request $request) {
    $validate_rule = [
       'name' => 'requied',
       'mail' => 'email',
       'age' => 'numeric|between:0,150,
    ];

    $this->validate($request, $validate_rule);
    return view('hello.index', ['msg'=>'正しく入力されました']);

}

 

return viewする前にバリデーションを実行している。
このとき入力値に問題があれば、return viewには進まず、再度フォームを表示する。

 

バリデーションエラー時

バリデーション時エラーの場合でフォームを再表示した際、
「エラーメッセージ」「前回の入力内容」を取り出すことができる。

取り出し方は、バリデーション結果をまとめてくれる$errorsという変数を使用する

#$errors変数から、エラー内容を取得、表示する例(view)

@section('content')
    @if (count($errors) > 0)
    <div>
        <ul>
            @foreach ($errors->all() as $error )
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
    @endif
...

 

特定の項目でエラーがあったか調べる

$errors->has(‘項目名’)

指定の項目でエラーがあった場合、trueが返される。

 

全てのエラーメッセージの取り出し

$errors->all()

$errors->all()とすることで、エラーメッセージを配列にまとめて取り出すことができる。
foreachで、順に値を取り出すなどの取り扱いをする。

 

指定した項目の最初のエラーメッセージを文字列で取得

$errors->first()

$errors->first()とすることで、指定した項目の最初のエラーメッセージを取得する。

 

指定した項目のエラーメッセージすべてを文字列で取得

$errors->get()

エラーメッセージは一、項目に対し一つとは限らない。
$errors->get()とすることで、first()と異なり、指定した項目のエラーメッセージ全てを取得する。

 

検証ルール

検証ルールは多いので、この記事では紹介しない。
適宜調べるなどしてほしい。

 

また関連記事として、コントローラ以外に記述する方法については、下記記事で紹介しているので、参考に。

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。