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

Таблицы

Настройка отображения записей в виде таблицы

Страница «Таблицы» — это основная страница раздела, которая отображает список всех записей модели в виде сортируемой и фильтруемой таблицы.

fields()

Обязательный метод, определяющий поля модели. По умолчанию система собирает и таблицы, и формы из этого метода.

app/Frame/PostResource.php
public function fields(): array
{
    return [
        ID::make('ID'),
        Text::make('title', 'Название статьи')
            ->sortable(),
        Toggle::make('is_published', 'Опубликовано')
            ->editable(),
        DateTime::make('created_at', 'Дата создания')
            ->format('d.m.Y H:i')
            ->sortable(),
    ];
}

Методы полей для таблицы

sortable
bool $val = true → static
Включает сортировку по полю — в шапке таблицы появляется кнопка для сортировки по возрастанию/убыванию.
searchable
bool|callable → static
Доступно только у Relation-полей (BelongsTo, MorphTo). Включает поиск по связанному ресурсу при выборе значения. У Text/Number/etc. этот метод НЕ существует — индексация в глобальном поиске управляется через toSearchableArray() на модели (Laravel Scout).
editable
bool|callable $val = true → self
Доступно у Toggle, Select и Image. Разрешает редактирование значения прямо в ячейке таблицы, без перехода на страницу записи.
format
string $format → static
Задаёт формат отображения значения (например, d.m.Y H:i для даты).
width
int $px → static
Фиксирует ширину колонки в пикселях. Полезно для длинных названий.
caption
callable(FrameRequest, Model): ?string → static
Подпись мелким шрифтом под значением в ячейке. Удобно для slug/sys_name/fias_id/пояснительных атрибутов, чтобы не делать отдельную колонку.

Подписи через caption

Типичный приём — основной атрибут сверху, вспомогательный мелким шрифтом под ним:

app/Frame/Resources/TagResource.php
use Frame\Laravel\Http\Requests\FrameRequest;

public function fieldsForIndex(): array
{
    return [
        ID::make('id', 'ID'),

        Text::make('name', 'Название')
            ->sortable()
            ->width(550)
            ->caption(fn (FrameRequest $request, Tag $tag): ?string => $tag->sys_name),

        Toggle::make('is_featured', 'Избранное')
            ->editable(),
    ];
}

В таблице над name будет заголовок, ниже серым — sys_name. В fields() оставляйте оба поля отдельно — на форме редактирования оба видны полноценно.

fieldsForIndex()

Необязательный метод. Если определён — на странице списка записей будут использоваться поля из него, а не из fields().

app/Frame/PostResource.php
public function fieldsForIndex(): array
{
    return [
        ID::make('ID'),
        Text::make('title', 'Название статьи')
            ->sortable(),
        Toggle::make('is_published', 'Опубликовано')
            ->editable(),
    ];
}
Таблицу можно фильтровать с помощью поиска или призм.

Класс-схема таблицы

Колонки списка можно вынести в отдельный класс-схему и подключить через статическое свойство $table — симметрично $form (см. Формы) и $infolist (см. Infolist). Схема наследуется от Frame\Laravel\Schemas\Table и определяет единственный метод fields(), который используется только для страницы списка. Настройки уровня колонки (ширины, подписи, агрегации) задаются на самих полях.

app/Frame/Resources/CommentResource.php
class CommentResource extends Resource
{
    public static ?string $table = CommentTable::class;
}
app/Frame/Schemas/CommentTable.php
use Frame\Laravel\Http\Requests\FrameRequest;
use Frame\Laravel\Schemas\Table;

class CommentTable extends Table
{
    public function fields(FrameRequest $request): array
    {
        return [
            ID::make('id'),
            Text::make('description', 'Комментарий')
                ->sortable(),
        ];
    }
}

Если $table не задан, ресурс использует fieldsForIndex()/fields(). Схема получает сам ресурс в конструкторе (доступен как $this->resource).

Отдельной artisan-команды для генерации схемы нет — класс создаётся вручную. frame:resource генерирует только сам ресурс.