Кастомні правила валідації - коли вбудованих недостатньо
Потрібно перевірити дані через зовнішній API? Або зробити складну перевірку в БД?
Вбудованих правил може не вистачити. Кастомні правила дають повний контроль.
Два підходи:
- Класи-правила (перевикористовні, тестовані)
- Closure (швидко, інлайн)
Коли використовувати:
- Бізнес-специфічна валідація
- Перевірки через зовнішній API
- Складні запити до БД
- Перевірки, що залежать від кількох полів
Порада: для правил, які повторюються в різних формах, краще робити окремий клас-правило.
// Швидко: closure-правило
public function rules()
{
return [
'username' => [
'required',
function ($attr, $value, $fail) {
if (strtoupper($value) !== $value) {
$fail("Поле {$attr} має бути у ВЕРХНЬОМУ регістрі.");
}
},
],
];
}
// Перевикористовно: php artisan make:rule Uppercase
class Uppercase implements Rule
{
public function passes($attribute, $value): bool
{
return strtoupper($value) === $value;
}
public function message(): string
{
return 'Поле :attribute має бути у верхньому регістрі.';
}
}