РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
173 of 274 menu

Метод 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,
    который управляет ошибками валидации в компоненте
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить