Класс формы в Livewire
Пусть у поста есть заголовок и текст, а оба значения лежат прямо в классе компонента. Пока полей мало, это терпимо, но с каждым новым полем класс редактора поста быстро становится тесным.
Отдельный класс формы держит
только данные полей. В компоненте
остаётся одно свойство
$form, а в шаблоне
связь идёт как
wire:model="form.title".
Давайте заведём PostForm
в App\Livewire\Forms
с полями title и
body:
<?php
namespace App\Livewire\Forms;
use Livewire\Form;
class PostForm extends Form
{
public $title = '';
public $body = '';
}
?>
Давайте создадим компонент
PostEditor:
php artisan make:livewire PostEditor --class
Давайте добавим маршрут и страницу:
<?php
Route::get('/posts/editor', function () {
return view('posts-editor');
});
?>
<x-layout>
<livewire:post-editor />
</x-layout>
Давайте объявим свойство формы в компоненте:
<?php
namespace App\Livewire;
use App\Livewire\Forms\PostForm;
use Livewire\Component;
class PostEditor extends Component
{
public PostForm $form;
public function render()
{
return view('livewire.post-editor');
}
}
?>
Давайте свяжем оба поля в шаблоне:
<div>
<input
type="text"
wire:model="form.title"
>
<textarea
wire:model="form.body"
></textarea>
</div>
Создайте класс EmployeeForm
и компонент EmployeeEditor.
Имя и должность работника
живут в классе формы.