Laravelのバリデーションについての記事5つ!

Laravel Laravel

LaravelでValidation(バリデーション)をする方法について書いている記事を5つまとめてみました。
簡単な記事の説明と内部リンクを貼っています。

内容としては下記になります。

・通常のバリデーション
・フォームリクエストでのバリデーション
・よく使うバリデーションの標準ルール11個
・Ruleを作成して、独自のバリデーション実装する方法
・バリデーションメッセージの日本語化について

Laravelでの通常のバリデーション

一番簡単にバリデーションする方法は、Controllerのメソッドでリクエストを受け取った時にvalidateメソッドを使用して、バリデーションする方法です。

public function requredTest(Request $request)
{
    $request->validate([
        'id' => 'required',
        'password' => 'required',
    ]);
}

例えば、上記のようにすると$requestにフォームのリクエストで送られてきた内容が格納されています。
この$requestインスタンスからvalidateメソッドを使用することで、バリデーションすることが可能です。

validateメソッドにはバリデーションするルールを指定します。
ルールは連想配列にして、左(キー)に画面のname属性の値、右(値)にバリデーションルールを書きます。
バリデーションにかかった場合は、後続の処理が行われずに呼び出し元にリダイレクトされてエラーメッセージを返します。

詳しい内容は、下記を参照してみてください。
LaravelでValidationする方法!

FormRequest(フォームリクエスト)を使ったバリデーション

フォームリクエストを使ってバリデーションをすると、バリデーションの内容をファイルにまとめるため、Controllerの中身がすっきりします。
例えば、投稿内容を保存するようなリクエストがあった場合にRequestクラスを使わずに、フォームリクエストを作成してMemoCreateRequestを使うようにします。

public function create(MemoCreateRequest $request)
{
     // --- 保存処理:省略 ---
    return redirect()->route("top.index");
}

こうすると、リクエストが飛んできた時に直ぐにMemoCreateRequestクラス内でバリデーションしてくれます。
MemoCreateRequestのフォームリクエストの中身は下記のようになり、この中でバリデーションできます。

class MemoCreateRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
            // ここにルールを記述する
    }
}
ファイルの作成方法や詳しい内容は、下記を参照してみてください。
LaravelのFormRequestでバリデーションする!

バリデーションのルールについて

Laravelでバリデーションするときにバリデーションルールを書きます。

$request->validate([
    'user_name' => 'required|max:10|min:3'
]);

上記のように設定すると、フォームのinputタグのname属性にuser_nameの値が設定されている項目のバリデーションになります。
右側に書いている「required|max:10|min:3」がバリデーションのルールです。
ここでは「項目必須・文字数の上限が10文字まで・文字数の下限が3文字以上の入力必須」のバリデーションになります。

Laravelの標準で使えるバリデーションと、自分でルールを作成することもできます。

Laravelの標準でよく使うものをまとめてみたので、下記を参照してみてください。
Laravelのバリデーションで使える標準ルール11選!

独自のRule(ルール)を作成してバリデーションする

上記は標準のルールでしたが、独自のルールを作成することが可能です。
独自のルールファイルは下記のartisanコマンドで作成ができます。(TestRuleというルールファイルを作成します)

$ php artisan make:rule TestRule

作成したファイルは下記のようになります。

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class TestRule implements Rule
{
    public function __construct()
    {
    }

    public function passes($attribute, $value)
    {
        // ルールを書く
    }

    public function message()
    {
                // エラーの内容を書く
        return 'The validation error message.';
    }
}

passesメソッドにルールを書いて、messageメソッドにエラーだった場合の内容を書いて実装します。

作成したルールを呼び出す方法など、詳しくは下記を参照してみてください。
Laravelでバリデーションのルール(Rule)を追加する!

バリデーションメッセージの日本語化する

Laravelでバリデーションの内容を日本語化するのも、簡単に行うことができます。
メッセージファイルはresources/lang/enに配置されているので、resources/lang/jaディレクトリを作成して言語ファイルを作成しておきます。

その後にconfig/app.phplocale項目を修正するだけです。

詳しくは下記を参照してみてください。
Laravelでバリデーションを日本語化する方法!

コメント

タイトルとURLをコピーしました