Є кілька рівнів - від рядкових правил до логіки в коді.
1. Готові умовні правила:
'company_name' => ['required_if:type,business'],
'vat_number' => ['required_with:company_name'],
'doctor_name' => ['exclude_if:has_appointment,false', 'required'],
'discount' => ['prohibited_unless:role,manager'],
exclude_if прибирає поле і з перевірки, і з validated() - зручно, коли воно не має сенсу за іншої відповіді.
2. Умова кодом:
'role_id' => Rule::requiredIf(fn () => $this->user()->isAdmin()),
'coupon' => Rule::when($this->boolean('has_coupon'), ['required', 'string']),
3. Перевірки на кілька полів одразу - метод after() запиту форми:
public function after(): array
{
return [function (Validator $validator) {
if ($this->date('ends_at') <= $this->date('starts_at')) {
$validator->errors()->add('ends_at', 'Кінець має бути пізніше за початок.');
}
}];
}
Для такого простого випадку вистачить і правила after:starts_at; after() потрібен, коли логіка складніша.