Laravel Livewire v3 представив атрибут #[Validate], який революціонізує підходи до валідації форм у компонентах. Ця потужна можливість дозволяє заявляти правила валідації безпосередньо на властивостях компонента, що робить код більш зрозумілим та легким для підтримки.
Атрибут #[Validate] усуває необхідність у традиційних масивах $rules, об'єднуючи логіку валідації з деклараціями властивостей. Це забезпечує миттєву ясність щодо умов валідації для кожного поля.
use Livewire\Component;
use Livewire\Attributes\Validate;
class UserForm extends Component
{
#[Validate('required|string|min:2')]
public $username = '';
#[Validate('required|email|unique:users,email')]
public $email = '';
public function submit()
{
$this->validate();
User::create([
'username' => $this->username,
'email' => $this->email,
]);
}
public function render()
{
return view('livewire.user-form');
}
}
Атрибут підтримує різні конфігурації, включаючи кастомні повідомлення про помилки, іменування атрибутів та умовні сценарії валідації. Ви можете налаштувати повідомлення про валідацію безпосередньо в декларації атрибута:
#[Validate('required|min:2', message: 'Ім'я користувача повинно містити щонайменше 2 символи')]
public $username = '';
Для складніших вимог до валідації синтаксис масиву надає додаткову гнучкість:
#[Validate([
'tags' => 'required|array',
'tags.*' => 'string|max:50'
], message: [
'tags.required' => 'Будь ласка, додайте хоча б один тег',
'tags.*.max' => 'Кожен тег повинен містити не більше 50 символів'
])]
public $tags = [];
Розгляньте розробку системи реєстрації на події, де застосовуються різні правила валідації залежно від типу події. Атрибут #[Validate] спрощує цей складний сценарій, зберігаючи логіку валідації поряд з відповідними властивостями.
class EventRegistration extends Component
{
#[Validate('required|string')]
public $participant_name = '';
#[Validate('required|email')]
public $participant_email = '';
#[Validate('required|in:workshop,seminar,conference')]
public $event_type = '';
#[Validate('nullable|required_if:event_type,conference|string')]
public $dietary_requirements = '';
#[Validate('boolean')]
public $newsletter_consent = false;
public function register()
{
$validated = $this->validate();
EventParticipant::create([
'name' => $validated['participant_name'],
'email' => $validated['participant_email'],
'event_type' => $validated['event_type'],
'dietary_requirements' => $validated['dietary_requirements'],
'newsletter_consent' => $validated['newsletter_consent'],
]);
$this->dispatch('registration-complete', name: $validated['participant_name']);
return $this->redirect('/events/confirmation');
}
public function render()
{
return view('livewire.event-registration');
}
}
Цей компонент реєстрації демонструє, як #[Validate] обробляє різні сценарії валідації, включаючи умовні вимоги та логічні поля. Поле dietary_requirements стає обов'язковим лише тоді, коли тип події - 'conference', що підкреслює гнучкість атрибута для динамічних правил валідації.
Атрибут #[Validate] працює ефективно в процесі виконання, зберігаючи продуктивність і покращуючи читабельність коду. Для додатків, які вимагають складної логіки валідації або кастомних правил, традиційні методи валідації залишаються доступними як доповнюючі підходи.