バリデーションルール
Laravelは required
や max
など色々なバリデーションを、デフォルトでかけることができます。しかし、案件によってはオリジナルなバリデーションルールを追加したい場合もあります。Laravelでオリジナルのルールを作成して、BLOCSで利用する方法を紹介します。
この記事では、Laravel11の実装方法を紹介します。Laravel10以前では、Laravelのオリジナルルール作成方法が異なりますのでご注意ください。
Laravelでオリジナルのルールを作る
artisanでオリジナルのルールを作ります。
php artisan make:rule Myrule
作成したルールを編集して、オリジナルのルールを作ります。今回は倍数の検証をするオリジナルのルールを作ります。
汎用性を持たせるために、コンストラクタで倍数を検証する数字を設定できるようしました。BLOCSテンプレートのdata-lang
で指定したメッセージが、$message
に自動でセットされます。
private $num;
private $message;
public function __construct(string $num, string $message)
{
$this->num = intval($num);
$this->message = $message;
}
次に、検証を通過する条件を設定します。$value
に入力値がセットされますので、条件を決めます。オリジナルルールの作成は以上です。
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (intval($value) % $this->num === 0) {
return;
}
$fail($this->message);
}
BLOCSのテンプレートで設定する
テンプレートでルールを指定します。デフォルトのバリデーションルールと併用することもできます。data-lang
で、エラーメッセージを設定します。
<input type="number" name="multiple" data-validate="bail|required|integer" />
<!--
!multiple="Myrule:5"
data-lang="5の倍数を入力してください。"
-->
@error("multiple") <div class="invalid-feedback">{{ $message }}</div> @enderror
コントローラーでバリデーション実行
コントローラーが、ベースコントローラーを継承している時は不要です。
テンプレートで指定するだけでは、入力フォームへのバリデーションはかかりません。指定したバリデーションとメッセージを、フォームリクエストやvalidate
メソッドに渡してバリデーションを実行します。今回は、フォームリクエストでバリデーションを実行しました。
public function rules()
{
return \Blocs\Validate::rules('books.create');
}
public function messages()
{
return \Blocs\Validate::messages('books.create');
}
バリデーションの動作確認です。5の倍数以外を入力すると、エラーメッセージが表示されます。
おわりに
今回は、オリジナルのバリデーションルールを作りました。プログラマーの労力を減らせる工夫を色々と取り入れてBLOCSを開発しています。PHP初学者や、プログラムに苦手意識のある方に特にオススメです。最後まで読んでいただき、ありがとうございました!