Метод rules()
Метод rules в компоненте Livewire определяет правила валидации для свойств формы.
Возвращает массив, где ключи - имена свойств, а значения - правила проверки.
Правила задаются в виде строки с разделителями | или массивом.
Этот метод автоматически вызывается при использовании $this->validate.
Синтаксис
<?php
namespace AppLivewire;
use LivewireComponent;
class UserForm extends Component
{
public $name;
public $email;
public $age;
protected function rules()
{
return [
'name' => 'required|string|max:255',
'email' => 'required|email',
'age' => 'nullable|integer|min:18',
];
}
public function render()
{
return view('livewire.user-form');
}
}
?>
Пример 1 Базовое использование
Давайте создадим форму регистрации с валидацией:
<?php
namespace AppLivewire;
use LivewireComponent;
class RegisterForm extends Component
{
public $username;
public $password;
public $email;
protected function rules()
{
return [
'username' => 'required|min:3|max:20',
'password' => 'required|min:6',
'email' => 'required|email|unique:users,email',
];
}
public function submit()
{
$this->validate();
// Save user...
}
public function render()
{
return view('livewire.register-form');
}
}
?>
<form wire:submit="submit">
<input type="text" wire:model="username" placeholder="Username">
@error('username') <span>{{ $message }}</span> @enderror
<input type="password" wire:model="password" placeholder="Password">
@error('password') <span>{{ $message }}</span> @enderror
<input type="email" wire:model="email" placeholder="Email">
@error('email') <span>{{ $message }}</span> @enderror
<button type="submit">Register</button>
</form>
Пример 2 Правила в виде массива
Можно использовать массив для более сложных правил:
<?php
namespace AppLivewire;
use LivewireComponent;
use IlluminateValidationRule;
class ProfileForm extends Component
{
public $role;
public $status;
protected function rules()
{
return [
'role' => ['required', Rule::in(['admin', 'user'])],
'status' => ['required', 'string', Rule::notIn(['blocked'])],
];
}
public function save()
{
$validated = $this->validate();
// Process validated data...
}
public function render()
{
return view('livewire.profile-form');
}
}
?>
Пример 3 Использование withValidator
Метод rules может использоваться вместе с withValidator:
<?php
namespace AppLivewire;
use LivewireComponent;
use IlluminateValidationValidator;
class ArticleForm extends Component
{
public $title;
public $body;
public $category;
protected function rules()
{
return [
'title' => 'required|max:100',
'body' => 'required',
'category' => 'required|exists:categories,id',
];
}
public function withValidator(Validator $validator)
{
$validator->after(function ($validator) {
if ($this->title === $this->body) {
$validator->errors()->add('body', 'Body must be different from title.');
}
});
}
public function publish()
{
$this->validate();
// Publish article...
}
public function render()
{
return view('livewire.article-form');
}
}
?>
Пример 4 Использование сообщений об ошибках
Вместе с rules можно определить кастомные сообщения:
<?php
namespace AppLivewire;
use LivewireComponent;
class ContactForm extends Component
{
public $name;
public $message;
public $rating;
protected function rules()
{
return [
'name' => 'required|min:2',
'message' => 'required|min:10',
'rating' => 'required|integer|between:1,5',
];
}
protected function messages()
{
return [
'name.required' => 'The name field is mandatory.',
'message.min' => 'Message must be at least 10 characters.',
'rating.between' => 'Rating must be between 1 and 5.',
];
}
public function send()
{
$this->validate();
// Send message...
}
public function render()
{
return view('livewire.contact-form');
}
}
?>
Смотрите также
-
метод
validate,
который выполняет валидацию на основе правил -
метод
validateOnly,
который валидирует только одно свойство -
метод
messages,
который задаёт кастомные сообщения ошибок -
метод
addError,
который добавляет ошибку вручную