Атрибут #[Validate]
Атрибут #[Validate] в Livewire позволяет задать правила валидации прямо над свойством компонента. Это альтернатива использованию метода rules, которая делает код более компактным и наглядным, так как правила находятся непосредственно рядом с объявлением свойства. В качестве значения атрибуту передаются правила валидации Laravel.
Синтаксис
<?php
namespace AppLivewire;
use LivewireComponent;
use LivewireAttributesValidate;
class UserForm extends Component
{
#[Validate('required|string|max:255')]
public $name;
#[Validate('required|email')]
public $email;
public function render()
{
return view('livewire.user-form');
}
}
?>
Пример
Давайте создадим форму, в которой проверим имя и email с помощью атрибута #[Validate]:
<?php
namespace AppLivewire;
use LivewireComponent;
use LivewireAttributesValidate;
class UserForm extends Component
{
#[Validate('required|string|min:2|max:50')]
public $name = '';
#[Validate('required|email')]
public $email = '';
public function save()
{
$this->validate();
// Saving logic...
}
public function render()
{
return view('livewire.user-form');
}
}
?>
<form wire:submit="save">
<div>
<label>Name:</label>
<input type="text" wire:model="name">
@error('name') <span>{{ $message }}</span> @enderror
</div>
<div>
<label>Email:</label>
<input type="email" wire:model="email">
@error('email') <span>{{ $message }}</span> @enderror
</div>
<button type="submit">Save</button>
</form>
Пример
При использовании атрибута #[Validate] можно задавать собственные сообщения об ошибках:
<?php
namespace AppLivewire;
use LivewireComponent;
use LivewireAttributesValidate;
class UserForm extends Component
{
#[Validate(
rule: 'required|string|min:2',
message: 'The name must be at least 2 characters.'
)]
public $name = '';
#[Validate(
rule: 'required|email',
message: 'Please enter a valid email address.'
)]
public $email = '';
public function save()
{
$this->validate();
// Saving logic...
}
public function render()
{
return view('livewire.user-form');
}
}
?>
Пример
Можно использовать атрибут #[Validate] с динамическими правилами, например, для проверки массива:
<?php
namespace AppLivewire;
use LivewireComponent;
use LivewireAttributesValidate;
class UserForm extends Component
{
#[Validate('required|array|min:1')]
public $tags = [];
#[Validate('required|string')]
public $title = '';
public function save()
{
$this->validate();
// Saving logic...
}
public function render()
{
return view('livewire.user-form');
}
}
?>
<form wire:submit="save">
<div>
<label>Title:</label>
<input type="text" wire:model="title">
@error('title') <span>{{ $message }}</span> @enderror
</div>
<div>
<label>Tags:</label>
<input type="text" wire:model="tags.0">
<input type="text" wire:model="tags.1">
@error('tags') <span>{{ $message }}</span> @enderror
</div>
<button type="submit">Save</button>
</form>
Смотрите также
-
атрибут
#[Rule],
который позволяет применять более сложные правила валидации -
атрибут
#[Url],
который синхронизирует свойство с параметром URL -
атрибут
#[Session],
который сохраняет свойство в сессии -
атрибут
#[Locked],
который защищает свойство от изменений на клиенте