Поддержка
Ресурсы

Просмотр записи

Детальная страница записи в режиме только для чтения (Infolist)

Infolist — это схема детальной страницы записи в режиме «только чтение». В отличие от формы, у него нет полей ввода и валидации, поэтому он дешевле и позволяет показать данные так, как удобно читать: с дружелюбными подписями, панелями, вычисляемыми значениями и предпросмотром контента.

Если Infolist не объявлен, детальная страница строится из обычных полей ресурса (fields()).

Подключение

Infolist выносится в отдельный класс-схему и указывается в ресурсе через статическое свойство $infolist:

app/Frame/Resources/PageResource.php
class PageResource extends Resource
{
    public static ?string $infolist = PageInfolistSchema::class;
}

Класс-схема

Схема наследуется от Frame\Laravel\Schemas\Infolist и реализует fields():

app/Frame/Schemas/PageInfolistSchema.php
use Frame\Laravel\Schemas\Infolist;
use Illuminate\Database\Eloquent\Model;

class PageInfolistSchema extends Infolist
{
    public function fields(FrameRequest $request): array
    {
        return [
            Panel::make('Обзор страницы', [
                Text::make('title', 'Заголовок'),
                Text::make('slug', 'URL-адрес'),

                // Вычисляемое значение: колонки blocks_count нет, оно
                // выводится на лету.
                Text::make('blocks_count', 'Блоков в контенте')
                    ->resolveUsing(fn(FrameRequest $r, Model $model): int => count(
                        json_decode((string) ($model->content ?? '[]'), true) ?: [],
                    )),
            ])->icon('tabler-file-text')->asTable(),
        ];
    }
}

Возможности

  • Панели группируют записи; поддерживают ->icon() и табличную раскладку ->asTable() (значения выводятся как строки таблицы «подпись → значение»).
  • Вычисляемые записи — через ->resolveUsing(); реальной колонки в БД не требуется.
  • Builder в Infolist рендерит сохранённые блоки как панели в режиме просмотра (см. Builder).

Infolist на дашборде

Карточка InfolistCard встраивает детальный Infolist любой записи прямо в дашборд — без отдельного компонента.

use Frame\Laravel\Cards\InfolistCard;

InfolistCard::make('pages', $pageId, 'Карточка страницы');

Параметры: ключ ресурса, идентификатор записи и (необязательно) заголовок карточки.