【Laravel】オリジナルバリデーションルールの作り方!make:ruleコマンド

この記事からわかること
- Laravelでオリジナルバリデーションルールの作り方
- make:ruleコマンドの詳細の作成されるファイル解説
- エラーメッセージやルールのカスタマイズ
\ アプリをリリースしました /
Laravelでオリジナルのバリデーションルールを作る方法と組み込み方をまとめていきたいと思います。
オリジナルバリデーションルールの作り方
独自のバリデーションルールを定義するにはLaravelに用意されているmake:rule
コマンドを使用します。
これで「app」>「Rules」の中に指定したファイル名(今回はTestOriginalRule)のスクリプトファイルが自動生成されます。ファイルの中は以下のようにクラスが定義されています。
TestOriginalRule.php
ルールクラスの各メソッドの意味
作成されたクラスは名前空間Illuminate\Contracts\Validation\Rule
を継承したルールクラスになっており3つのメソッドがデフォルトで記述されています。
- __construct:初期化処理(変数に格納など)
- passesメソッド:バリデーションルール(判定部分)
- messageメソッド:エラー時のメッセージ
__construct
__construct
はphpのクラス構造自体に元々定義されているインスタンス化した時に自動実行される処理を記述できるメソッドです。クラスのプロパティ(変数)に値を渡すなどインスタンス化時に初期化するための処理などして使用します。
バリデーションルール作成に重要なのはpasses
メソッドとmessage
メソッドです。
passesメソッドの役割
passes
メソッドはバリデーションルールのエラー判定を行うメソッドです。最終的に返す値でエラー判定を行い、true
にすれば合格、false
にすればエラーとしてはねることができます。
引数にはルール関係の設定属性を受け取る$attribute
と実際に検証する値を受け取る$value
が渡されます。
messageメソッド
message
メソッドはxエラーとして弾いた時に出せるメッセージを定義Yesできるメソッドです。
メッセージの中に:attribute
と組み込むと自動で指定したname
属性の値へと置換されます。
独自ルールを使用する
独自ルールを実際に使用するには使用するファイルでuse
文を使ってルールクラスを読み込みます。
続いてルールを作成する配列の中で適応させたいルールクラスをインスタンス化するだけです。これでオリジナルルールを使ったバリデーションができるようになります。
インスタンス化時に引数を渡す
ルールクラスを動的に変化させるために引数から値を渡すことも可能です。その際はルールクラスのコンストラクタを使用しクラスのプロパティへと値を渡します。
例として「引数に渡された文字位置の値が.(ドット)のみ許容」という独自ルールを作成してみます。
作成コマンド
PosOnlyDot.php
コンストラクタでプロパティに格納すれば他のメソッドの中からでもその値に参照することが可能になるのでその値による分岐や取得ができるようになります。
あとは通常のバリデーションルール同様に組み込むだけです。|
区切りのルール定義ではなく、以下のような配列形式で独自ルールは渡します。
Controller.phpなど
おすすめ記事:【まとめ】Laravel-バリデーションルール一覧
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。