Laravelでバリデーションを設定する

Laravelvalidation,バリデート,入力チェック

Laravelはバリデーションも簡単に設定できて便利です。

Controllerに直接バリデーション処理を記載することもできますが、分けたほうが可読性が上がるので私個人としてはRequestClassで設定するほうが好きです。

 

このサイトを参照しました

artisanを実行

まずはコンソールで下記コマンドを実行。
RequestValidateの箇所はクラス名になりますので、任意の名前をつけてください。

$ php artisan make:request RequestValidate

下記パスにバリデーションクラスが作成されます。
{project}/app/Http/Requests/RequestValidate.php

必要な箇所を修正します。

/**
 * Determine if the user is authorized to make this request.
 *
 * @return bool
 */
public function authorize()
{
    return true; // 初期状態ではfalseになっているのでtrueに修正
}

次にrulesを設定。
ここではreturnで返却するkeyに入力項目のname、Valueにどのバリデーションを行うか指定します。

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    return [
        'name' => 'required|max:10',
        'email' => 'email'
    ];
}

上記の例ではnameに必須と最大10文字まで、emailにはemail形式で入力されているかチェックするという内容になっています。

値で指定できるバリデーションには様々なものが用意されています。
下記ページなどを参照してください。

bladeファイルに以下のようなエラー文言を表示させる処理を追記しましょう。

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

初期状態ではエラー文言がすべて英語なので、日本語にするにはバリデーションクラスに戻ってmessagesを追加する必要があります。

public function messages()
{
    return [
        'name.required' => ':attributeが入力されていません',
        'name.max' => ':attributeは10文字までです',
        'email.email' => ':attributeはメールアドレスの形式ではありません'
    ];
}

ここではrulesで設定したバリデーションチェックで引っかかった場合、どのようなエラー文言を表示するか設定できます。

returnで返却するkeyには入力項目のname + どのバリデーション時かを指定します。
valueにはエラー文言を指定します。
項目名を直接指定してもOKなのですが、今回は:attributeと記載しています。

最後にattributesを追加します。

public function attributes()
{
    return [
        'name' => '氏名',
        'email' => 'メールアドレス',
    ];
}

keyに項目のname、valueに論理名を指定します。
ここで指定した項目が、messagesの:attributeで変換されます。

これでエラー文言が日本語で正しく表示されるようになりました。