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

Класс Form

Класс Form в Livewire предназначен для вынесения логики валидации и управления данными формы в отдельный класс. Это позволяет организовать код компонента, сделав его более чистым и переиспользуемым. Класс Form содержит свойства, которые соответствуют полям формы, и методы для валидации и заполнения данных.

Для создания класса Form используется команда php artisan livewire:form, которая генерирует класс в директории app/Livewire/Forms. Класс должен наследоваться от Livewire\Form и может использовать атрибуты #[Rule] для определения правил валидации. Основное преимущество - вся логика формы находится в одном месте, а компонент только использует готовый объект формы.

Создание класса Form

Давайте создадим класс Form для формы регистрации пользователя:

<?php namespace App\Livewire\Forms; use Livewire\Form; use Livewire\Attributes\Rule; class RegistrationForm extends Form { #[Rule('required|min:3|max:50')] public $name = ''; #[Rule('required|email|max:100')] public $email = ''; #[Rule('required|min:8|confirmed')] public $password = ''; #[Rule('required')] public $password_confirmation = ''; } ?>

В этом примере мы определили свойства формы и правила валидации для каждого поля с помощью атрибутов #[Rule].

Использование Form в компоненте

Теперь создадим компонент, который будет использовать созданный класс Form:

<?php namespace App\Livewire; use Livewire\Component; use App\Livewire\Forms\RegistrationForm; class Registration extends Component { public RegistrationForm $form; public function save() { $this->form->validate(); // Save user logic here session()->flash('message', 'Registration successful!'); } public function render() { return view('livewire.registration'); } } ?>
<form wire:submit="save"> <div> <label for="name">Name</label> <input type="text" id="name" wire:model="form.name"> @error('form.name') <span>{{ $message }}</span> @enderror </div> <div> <label for="email">Email</label> <input type="email" id="email" wire:model="form.email"> @error('form.email') <span>{{ $message }}</span> @enderror </div> <div> <label for="password">Password</label> <input type="password" id="password" wire:model="form.password"> @error('form.password') <span>{{ $message }}</span> @enderror </div> <div> <label for="password_confirmation">Confirm Password</label> <input type="password" id="password_confirmation" wire:model="form.password_confirmation"> @error('form.password_confirmation') <span>{{ $message }}</span> @enderror </div> <button type="submit">Register</button> </form>

Результат выполнения кода:

<form> <div> <label>Name</label> <input type="text" value="John Doe"> </div> <div> <label>Email</label> <input type="email" value="john@example.com"> </div> <div> <label>Password</label> <input type="password"> </div> <div> <label>Confirm Password</label> <input type="password"> </div> <button>Register</button> </form>

Метод validate

Метод validate выполняет валидацию всех свойств формы на основе заданных правил. В случае ошибки валидации выбрасывается исключение, и ошибки отображаются в шаблоне:

<?php namespace App\Livewire\Forms; use Livewire\Form; use Livewire\Attributes\Rule; class LoginForm extends Form { #[Rule('required|email')] public $email = ''; #[Rule('required|min:6')] public $password = ''; public function login() { $this->validate(); // Attempt login } } ?>

Метод validateOnly

Метод validateOnly выполняет валидацию только одного поля формы. Это полезно для валидации в реальном времени при вводе данных:

<?php namespace App\Livewire\Forms; use Livewire\Form; use Livewire\Attributes\Rule; class ProfileForm extends Form { #[Rule('required|min:2|max:30')] public $username = ''; #[Rule('required|email|unique:users,email')] public $email = ''; public function updated($field) { $this->validateOnly($field); } } ?>

Метод reset

Метод reset сбрасывает все свойства формы к их начальным значениям. Это полезно после успешной отправки формы:

<?php namespace App\Livewire\Forms; use Livewire\Form; use Livewire\Attributes\Rule; class ContactForm extends Form { #[Rule('required|min:3')] public $name = ''; #[Rule('required|email')] public $email = ''; #[Rule('required|min:10')] public $message = ''; public function submit() { $this->validate(); // Send message logic $this->reset(); } } ?>

Метод fill

Метод fill заполняет свойства формы значениями из массива. Это удобно для редактирования существующих данных:

<?php namespace App\Livewire\Forms; use Livewire\Form; use Livewire\Attributes\Rule; class UserForm extends Form { #[Rule('required|min:3')] public $name = ''; #[Rule('required|email')] public $email = ''; public function loadUser($user) { $this->fill([ 'name' => $user->name, 'email' => $user->email ]); } } ?>

Метод only

Метод only возвращает только указанные свойства формы в виде массива:

<?php namespace App\Livewire\Forms; use Livewire\Form; use Livewire\Attributes\Rule; class SettingsForm extends Form { #[Rule('required')] public $theme = 'light'; #[Rule('required|in:en,ru')] public $locale = 'en'; #[Rule('nullable|email')] public $notification_email = ''; public function getSettings() { return $this->only(['theme', 'locale']); } } ?>

Смотрите также

  • метод validate,
    который выполняет валидацию всех свойств формы
  • метод validateOnly,
    который выполняет валидацию одного поля формы
  • метод reset,
    который сбрасывает свойства формы к начальным значениям
  • метод fill,
    который заполняет свойства формы значениями из массива
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить