Метод validateOnly
Метод
validateOnlyклассаComponentв Livewire предназначен для валидации одного конкретного поля формы. В отличие от методаvalidate, который проверяет все поля сразу,validateOnlyпринимает имя поля в качестве первого аргумента, а вторым аргументом - массив правил валидации. Метод возвращает массив с ошибками валидации для указанного поля.Синтаксис
<?php $this->validateOnly('field_name', [ 'field_name' => 'required|email|max:255' ]); ?>Пример
Давайте создадим компонент с формой регистрации, где будем валидировать только поле email:
<?php namespace AppLivewire; use LivewireComponent; class RegisterForm extends Component { public $email = ''; public $password = ''; public $name = ''; public function validateEmail() { $this->validateOnly('email', [ 'email' => 'required|email|max:255' ]); } public function render() { return view('livewire.register-form'); } } ?><form> <div> <label>Name:</label> <input type="text" wire:model="name"> </div> <div> <label>Email:</label> <input type="email" wire:model="email" wire:blur="validateEmail"> @error('email') <span>{{ $message }}</span> @enderror </div> <div> <label>Password:</label> <input type="password" wire:model="password"> </div> </form>Результат выполнения кода:
<div> <label>Name:</label> <input type="text"> </div> <div> <label>Email:</label> <input type="email"> <span>The email field is required.</span> </div> <div> <label>Password:</label> <input type="password"> </div>Пример
Давайте используем метод
validateOnlyвнутри метода компонента для валидации поля перед сохранением:<?php namespace AppLivewire; use LivewireComponent; class UserProfile extends Component { public $username = ''; public $age = ''; public $email = ''; public function updateProfile() { $this->validateOnly('username', [ 'username' => 'required|min:3|max:50' ]); $this->validateOnly('age', [ 'age' => 'required|integer|min:18|max:99' ]); // Save data... } public function render() { return view('livewire.user-profile'); } } ?><form wire:submit.prevent="updateProfile"> <div> <label>Username:</label> <input type="text" wire:model="username"> @error('username') <span>{{ $message }}</span> @enderror </div> <div> <label>Age:</label> <input type="number" wire:model="age"> @error('age') <span>{{ $message }}</span> @enderror </div> <div> <label>Email:</label> <input type="email" wire:model="email"> </div> <button type="submit">Update</button> </form>Пример
Давайте используем метод
validateOnlyс собственными сообщениями об ошибках:<?php namespace AppLivewire; use LivewireComponent; class ContactForm extends Component { public $phone = ''; public $message = ''; public function validatePhone() { $this->validateOnly('phone', [ 'phone' => 'required|regex:/^[0-9]{10}$/' ], [ 'phone.required' => 'Phone number is mandatory', 'phone.regex' => 'Phone must contain 10 digits' ]); } public function render() { return view('livewire.contact-form'); } } ?><form> <div> <label>Phone:</label> <input type="text" wire:model="phone" wire:keyup="validatePhone"> @error('phone') <span>{{ $message }}</span> @enderror </div> <div> <label>Message:</label> <textarea wire:model="message"></textarea> </div> </form>Смотрите также
- метод
validate,
который выполняет валидацию всех полей формы- метод
addError,
который добавляет ошибку валидации вручную- метод
resetValidation,
который сбрасывает все ошибки валидации- директиву
@error,
которая выводит сообщение об ошибке для поля