Свойство как JSON в Livewire
Давайте теперь представим, что у поста несколько мелких полей, город и подпись, и хранить их порознь в компоненте неудобно.
Атрибут Json держит массив одним значением свойства: Livewire корректно передаёт его между сервером и браузером, а в коде удобно менять отдельные ключи.
Давайте создадим компонент
PostMeta:
php artisan make:livewire PostMeta --class
Давайте добавим маршрут и страницу:
<?php
Route::get('/posts/meta', function () {
return view('posts-meta');
});
?>
<x-layout>
<livewire:post-meta />
</x-layout>
Давайте заведём свойство с атрибутом Json:
<?php
namespace App\Livewire;
use Livewire\Attributes\Json;
use Livewire\Component;
class PostMeta extends Component
{
#[Json]
public $meta = ['city' => 'Rome'];
public function changeCity()
{
$this->meta['city'] = 'Paris';
}
public function render()
{
return view('livewire.post-meta');
}
}
?>
Давайте выведем город и поставим кнопку смены в шаблоне:
<div>
<div>{{ $meta['city'] }}</div>
<button wire:click="changeCity">
Change
</button>
</div>
Создайте компонент EmployeeMeta.
Город работника хранится
вместе с другими мелкими
полями одним значением.