Для создания и редактирования ресурса используется один livewire компонент.
В blade шаблоне в компонент нужно передать модель для редактирования.
// resources/views/admin/posts/edit.blade.php
...
@section('content')
<livewire:admin.posts.post-item :resource="$model"/>
@stop
php artisan make:livewire Admin/Posts/PostItem
Для правильной работы нужно отнаследоваться от ResourceComponent.
// app/Http/Livewire/Admin/Posts/PostItem.php
<?php
namespace App\Http\Livewire\Admin\Posts;
use App\Models\Post;
use WebVovan\RockCms\Http\Livewire\ResourceComponent;
class PostItem extends ResourceComponent
{
// Eloquent модель
public Post $resource;
// Класс ресурса
public string $resourceClass = Post::class;
// Именованный маршрут списка ресурсов
public string $nameRouteResourceList = 'posts.list';
// Именованный маршрут редактирования ресурса
public string $nameRouteResourceEdit = 'posts.edit';
// Правила валидации полей
protected $rules = [
'resource.title' => 'string|required',
'resource.desc' => 'string',
];
/**
* Вызывается один раз при инициализации компонента
*/
public function init()
{
$this->resource->title = $this->resource->title ?? '';
$this->resource->desc = $this->resource->desc ?? '';
}
/**
* Вызывается при сохранении ресурса
*/
public function save()
{
$this->resource->save();
}
public function render()
{
return view('livewire.admin.posts.post-item');
}
}
В шаблоне компонента просто перечисляем список полей.
// resources/views/livewire/admin/posts/post-item.blade.php
<div>
<x-rock-cms::input field="resource.title" title="Заголовок"/>
<x-rock-cms::editor :model="$resource->desc" field="resource.desc" title="Описание"/>
</div>
В итоге получаем такую страницу.