> For the complete documentation index, see [llms.txt](https://web-vovan.gitbook.io/rock-cms/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://web-vovan.gitbook.io/rock-cms/ispolzovanie/sozdanie-i-redaktirovanie-resursa.md).

# Создание и редактирование ресурса

Для создания и редактирования ресурса используется один livewire компонент.

В blade шаблоне в компонент нужно передать модель для редактирования.

```php
// resources/views/admin/posts/edit.blade.php

...

@section('content')
    <livewire:admin.posts.post-item :resource="$model"/>
@stop
```

{% hint style="info" %}
Переменная $model передается из роута. Подробнее про настройку роутов [здесь](/rock-cms/nastroika/routy.md).
{% endhint %}

Создание livewire компонента:

```
php artisan make:livewire Admin/Posts/PostItem
```

Для правильной работы нужно отнаследоваться от ResourceComponent.

```php
// 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');
    }
}
```

В шаблоне компонента просто перечисляем список полей.

{% hint style="info" %}
Rock.Cms поставляется с большим количеством уже готовых [полей](/rock-cms/ispolzovanie/sozdanie-i-redaktirovanie-resursa/polya.md).
{% endhint %}

```php
// 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>
```

В итоге получаем такую страницу.

![](https://973475072-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTEka831UoiHiDOJAdYbS%2Fuploads%2Fj0nTJC34Ou0QKBE2zbyC%2F%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202022-05-31%20%D0%B2%2014.59.54.png?alt=media\&token=1a997ae5-4b59-4c05-b0bc-2c487b98c7b8)
