Метод validate
Метод validate класса Component предназначен
для валидации данных формы, переданных от клиента.
Он принимает массив правил валидации и опционально массив
сообщений об ошибках и атрибутов. Метод автоматически
применяет правила к данным, доступным в свойствах компонента,
и в случае успеха возвращает массив проверенных данных.
Если валидация не проходит, выбрасывается исключение
ValidationException, которое Livewire перехватывает
и отображает ошибки в интерфейсе.
Синтаксис
<?php
use IlluminateValidationRule;
$this->validate(
$rules,
$messages = [],
$attributes = []
);
?>
Параметры метода:
-
$rules- массив правил валидации, ключи - имена свойств, значения - правила Laravel (строка или массив) -
$messages- опционально массив пользовательских сообщений об ошибках -
$attributes- опционально массив кастомных имен атрибутов для сообщений
Пример
Давайте провалидируем свойства $name и $email
в компоненте формы регистрации:
<?php
namespace AppLivewire;
use LivewireComponent;
class RegistrationForm extends Component
{
public $name = '';
public $email = '';
public function save()
{
$validated = $this->validate([
'name' => 'required|min:3|max:255',
'email' => 'required|email|unique:users,email',
]);
// Сохранение пользователя...
}
public function render()
{
return view('livewire.registration-form');
}
}
?>
<form wire:submit="save">
<input type="text" wire:model="name" placeholder="Name">
@error('name') <span>{{ $message }}</span> @enderror
<input type="email" wire:model="email" placeholder="Email">
@error('email') <span>{{ $message }}</span> @enderror
<button type="submit">Register</button>
</form>
Результат выполнения кода при ошибках валидации:
<form>
<input type="text" placeholder="Name">
<span>The name field is required.</span>
<input type="email" placeholder="Email">
<span>The email field is required.</span>
<button type="submit">Register</button>
</form>
При успешной валидации метод возвращает массив проверенных данных:
[
'name' => 'John Doe',
'email' => 'john@example.com',
]
Пример
Используем метод validate с пользовательскими сообщениями
и атрибутами для более дружественного интерфейса:
<?php
namespace AppLivewire;
use LivewireComponent;
class ProfileForm extends Component
{
public $username = '';
public $age = '';
public function update()
{
$this->validate(
[
'username' => 'required|alpha_dash|min:4',
'age' => 'required|integer|min:18',
],
[
'username.required' => 'Username is required',
'username.min' => 'Username must be at least :min characters',
'age.required' => 'Age is required',
'age.integer' => 'Age must be a valid number',
'age.min' => 'You must be at least :min years old',
],
[
'username' => 'User name',
'age' => 'Age',
]
);
// Обновление профиля...
}
public function render()
{
return view('livewire.profile-form');
}
}
?>
<form wire:submit="update">
<input type="text" wire:model="username" placeholder="Username">
@error('username') <span>{{ $message }}</span> @enderror
<input type="number" wire:model="age" placeholder="Age">
@error('age') <span>{{ $message }}</span> @enderror
<button type="submit">Update</button>
</form>
Результат выполнения кода при ошибках валидации:
<form>
<input type="text" placeholder="Username">
<span>User name is required</span>
<input type="number" placeholder="Age">
<span>Age must be a valid number</span>
<button type="submit">Update</button>
</form>
Пример
Метод validate также можно использовать для валидации
только части данных с помощью динамических правил:
<?php
namespace AppLivewire;
use LivewireComponent;
use IlluminateValidationRule;
class PaymentForm extends Component
{
public $payment_method = '';
public $card_number = '';
public $amount = '';
public function process()
{
$rules = [
'payment_method' => 'required|in:card,bank',
'amount' => 'required|numeric|min:1',
];
if ($this->payment_method === 'card') {
$rules['card_number'] = 'required|size:16';
}
$validated = $this->validate($rules);
// Обработка платежа...
}
public function render()
{
return view('livewire.payment-form');
}
}
?>
<form wire:submit="process">
<select wire:model="payment_method">
<option value="">Select method</option>
<option value="card">Credit Card</option>
<option value="bank">Bank Transfer</option>
</select>
@error('payment_method') <span>{{ $message }}</span> @enderror
@if ($payment_method === 'card')
<input type="text" wire:model="card_number" placeholder="Card number">
@error('card_number') <span>{{ $message }}</span> @enderror
@endif
<input type="number" wire:model="amount" placeholder="Amount">
@error('amount') <span>{{ $message }}</span> @enderror
<button type="submit">Process</button>
</form>
Результат выполнения кода при ошибках валидации:
<form>
<select>
<option value="">Select method</option>
<option value="card">Credit Card</option>
<option value="bank">Bank Transfer</option>
</select>
<span>The payment method field is required.</span>
<input type="text" placeholder="Card number">
<input type="number" placeholder="Amount">
<span>The amount field is required.</span>
<button type="submit">Process</button>
</form>
Смотрите также
-
метод
validateOnly,
который валидирует только одно поле формы -
метод
resetValidation,
который сбрасывает ошибки валидации для указанных полей -
метод
addError,
который добавляет пользовательскую ошибку в ErrorBag -
класс
ErrorBag,
который управляет ошибками валидации в компоненте