この記事では、Laravelでカスタムバリデータを使用して、リクエストデータに基づいて動的にバリデーションルールを適用する方法を紹介します。
バリデータの準備
まずは、カスタムバリデータを作成するために、Laravelプロジェクト内で新しいクラスを作成します。その後、必要なインスタンス変数とコンストラクタを定義します。
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Validation\ValidationFactory;
class CustomValidator implements Rule
{
private $dynamic_rules;
private $validation_factory;
public function __construct($dynamic_rules, ValidationFactory $validation_factory)
{
$this->dynamic_rules = $dynamic_rules;
$this->validation_factory = $validation_factory;
}
}
バリデーションルールを適用する方法
次に、passes
メソッドを実装して、リクエストデータに基づいて動的にバリデーションルールを適用します。
public function passes($attribute, $value)
{
preg_match('/your_pattern.(\d+).value/', $attribute, $matches);
$index = $matches[1] ?? '';
if ($index === '') {
return false;
}
$requestData = request()->input();
$dynamicKey = $requestData['your_data'][$index]['dynamic_key'] ?? '';
if (!$dynamicKey) {
return false;
}
$rule = $this->dynamic_rules[$dynamicKey];
$rulesArray = explode('|', $rule);
$validator = $this->validation_factory->make(
[$attribute => $value],
[$attribute => $rulesArray]
);
return $validator->passes();
}
バリデータのメッセージのカスタマイズ
バリデーションが失敗した場合に表示されるメッセージをカスタマイズするには、message
メソッドを実装します。
public function message() { return '入力された値が無効です。'; }
実装例と注意点
この例では、リクエストデータの構造や動的キーを適切に取得するために、正規表現を使用しています。この正規表現は、あなたのプロジェクトに合わせて変更する必要があります。
また、リクエストデータの取得や動的キーの取得に失敗した場合に、false
を返すようにしています。これにより、適切なバリデーションルールが適用されない場合でも、バリデーションが失敗するようになります。
まとめ
この記事では、Laravelでカスタムバリデータを使用して、リクエストデータに基づいて動的にバリデーションルールを適用する方法を紹介しました。この方法を使用することで、リクエストデータの構造や内容に応じて柔軟なバリデーションルールを適用することができます。ただし、正規表現やリクエストデータの取得方法を適切に設定することが重要です。
コメント