Livewireでは$rulesプロパティを定義することで、バリデーションルールを設定することができます。
protected $rules = [
'name' => 'required',
'email' => 'required|email'
];
public function submit()
{
// バリデーション実行
$this->validate();
// バリデーションで問題なければ続く処理が実行
}
上はあらかじめ決められたルールを適用するケースですが、このルールを動的に変更したい場合(選択肢によって表示される項目が変わるなど)があるかと思います。
その際に思いつくことしては、以下のようにmount時に$rulesを書き換えることかと思いますが、これではバリデーションルールを変更することはできません。
protected $rules = [
'name' => 'required',
'email' => 'required|email'
];
public function mount ()
{
// mount上部で定義したバリデーションルールのままで以下に書き変わらない
$this->rules = [
'name' => 'required',
'email' => 'required|email',
'postcode' => 'required'
];
}
そこで別な方法としては、$rulesプロパティの代わりにメソッドを定義し、mount時に呼び出すことで動的にバリデーションルールを書き換えることができます。
public function mount ()
{
$this->rules();
}
protected function rules()
{
//$this->conditionは何かしらのフラグ
if ($this->condition) {
return [
'name' => 'required',
'email' => 'required|email',
'postcode' => 'required'
];
} else {
return [
'name' => 'required',
'email' => 'required|email'
];
}
}
[参考]
https://readouble.com/livewire/2.x/ja/input-validation.html