laravel-adminとは
Laravelの管理画面作成用ライブラリ
https://www.laravel-admin.org/docs/en
やりたいこと
$form->rules()
にLaravelのバリデーションルールを記載するが、入力値によってバリデーションの内容を変更できるようにしたい
※$form->rules()には書いてなさそう。
どうやったか?→Rule::when()を使って実装した
Laravelのバリデーションルールで、sometimes
のような条件付きでバリデーションを実行してくれるメソッドRule::when()
があるようなので、それを使って実装した。
実装サンプル
$form->currency('price_min', '価格(最小)')
->symbol('¥')->digits(0)->default(0)
->rules('required|integer|between:0,99999');
$form->currency('price_max', '価格(最大)')
->symbol('¥')->digits(0)->default(0)
->rules([
'required', 'integer', 'between:0,10000',
Rule::when(static fn($request) => $request->price_max > 0, ['gt:price_min']) ,
]);
→ 「価格(最大)」を設定する(1円以上)時だけ、「価格(最大) > 価格(最小)」のチェックをする
終わりに
Rule::when()
はLaravelのバリデーションページに書いてなかった・・
laravel-adminを使わないときでもwhenメソッドは便利そう