Команда livewire:form
Команда livewire:form создает отдельный класс для управления формой,
валидацией и бизнес-логикой в компонентах Livewire.
Это позволяет вынести логику работы с формой из компонента в отдельный класс,
делая код чище и переиспользуемым.
Команда принимает один обязательный параметр - имя класса формы.
Синтаксис
php artisan livewire:form FormName
После выполнения команды в директории app/Livewire/Forms
будет создан файл с классом формы.
В классе можно определить свойства, правила валидации и методы.
Пример
Создадим форму для создания статьи с полями title и content:
<?php
namespace App\Livewire\Forms;
use Livewire\Attributes\Validate;
use Livewire\Form;
class ArticleForm extends Form
{
#[Validate('required|min:3|max:50')]
public string $title = '';
#[Validate('required|min:10')]
public string $content = '';
public function save()
{
Article::create([
'title' => $this->title,
'content' => $this->content,
]);
}
}
?>
Пример
Используем созданную форму в компоненте Livewire:
<?php
namespace App\Livewire;
use Livewire\Component;
use App\Livewire\Forms\ArticleForm;
class CreateArticle extends Component
{
public ArticleForm $form;
public function save()
{
$this->form->validate();
$this->form->save();
session()->flash('message', 'Article created');
}
public function render()
{
return view('livewire.create-article');
}
}
?>
<form wire:submit="save">
<input type="text" wire:model="form.title">
@error('form.title')
<span>{{ $message }}</span>
@enderror
<textarea wire:model="form.content"></textarea>
@error('form.content')
<span>{{ $message }}</span>
@enderror
<button type="submit">Create</button>
</form>
Пример
Создадим форму с дополнительными методами для редактирования:
<?php
namespace App\Livewire\Forms;
use Livewire\Attributes\Validate;
use Livewire\Form;
use App\Models\User;
class UserForm extends Form
{
#[Validate('required|email')]
public string $email = '';
#[Validate('required|min:6')]
public string $password = '';
public ?User $user = null;
public function setUser(User $user)
{
$this->user = $user;
$this->email = $user->email;
}
public function update()
{
$this->validate();
$this->user->update([
'email' => $this->email,
'password' => bcrypt($this->password),
]);
}
}
?>
<?php
namespace App\Livewire;
use Livewire\Component;
use App\Models\User;
use App\Livewire\Forms\UserForm;
class EditUser extends Component
{
public UserForm $form;
public User $user;
public function mount(User $user)
{
$this->user = $user;
$this->form->setUser($user);
}
public function update()
{
$this->form->update();
session()->flash('message', 'User updated');
}
public function render()
{
return view('livewire.edit-user');
}
}
?>
<form wire:submit="update">
<input type="email" wire:model="form.email">
@error('form.email')
<span>{{ $message }}</span>
@enderror
<input type="password" wire:model="form.password">
@error('form.password')
<span>{{ $message }}</span>
@enderror
<button type="submit">Update</button>
</form>
Смотрите также
-
команду
livewire:make,
которая создает новый компонент Livewire -
команду
livewire:publish,
которая публикует файлы конфигурации Livewire -
команду
livewire:config,
которая управляет настройками Livewire -
команду
livewire:stubs,
которая публикует шаблоны для генерации файлов Livewire