Редактирование записи в Livewire
Давайте теперь возьмём экран правки поста. Заголовок в базе уже есть, а форма на странице пустая. Человек не видит старый текст и не может его поправить.
При первом появлении компонента
метод mount может найти
запись по номеру и заполнить
поля. Метод save запишет
изменения обратно через
update у модели.
Пусть в проекте есть модель
Post с полями заголовка
и текста.
Давайте создадим компонент
PostChange:
php artisan make:livewire PostChange --class
Давайте добавим маршрут правки и страницу с номером записи:
<?php
Route::get('/posts/{id}/edit', function ($id) {
return view('posts-edit', compact('id'));
});
?>
<x-layout>
<livewire:post-change :id="$id" />
</x-layout>
Давайте в классе сохраним номер
записи, заполним поля в
mount и обновим строку
в save:
<?php
namespace App\Livewire;
use App\Models\Post;
use Livewire\Component;
class PostChange extends Component
{
public $postId;
public $title = '';
public $body = '';
public function mount($id)
{
$post = Post::find($id);
$this->postId = $post->id;
$this->title = $post->title;
$this->body = $post->body;
}
public function save()
{
Post::find($this->postId)->update([
'title' => $this->title,
'body' => $this->body,
]);
}
public function render()
{
return view('livewire.post-change');
}
}
?>
Давайте в шаблоне оформим форму с полями заголовка и текста:
<div>
<form wire:submit="save">
<input
type="text"
wire:model="title"
>
<textarea
wire:model="body"
></textarea>
<button type="submit">
Save
</button>
</form>
</div>
Создайте компонент EmployeeChange.
Откройте форму с уже сохранёнными
именем и должностью работника
и сохраните правку в базу.