Поддержка
Действия

В ресурсах

Действия для выполнения операций над записями ресурса

Действия в ресурсах предназначены для бизнес-операций над одной или несколькими записями: изменение статуса, экспорт данных, отправка уведомлений и т.д.

Пример

Класс, который помечает заказ как оплаченный:

app/Frame/Actions/Orders/PaymentSuccessOrderAction.php
class PaymentSuccessOrderAction extends Action
{
    public string $title = 'Принять платеж';

    public string $description = 'Вы собираетесь принять платеж и сделать заказ оплаченным. Вы уверены?';

    public function handle(LazyCollection $models, ActionFields $fields): ?ActionResult
    {
        $order = $models->first();

        if ($order->status === OrderStatus::PURCHASED) {
            return self::error('Заказ уже оплачен');
        }

        $order->update(['status' => OrderStatus::COMPLETE]);

        return self::push([
            'name' => 'resource.detail',
            'params' => [
                'resource' => $order->getMorphClass() . 's',
                'id' => $order->getKey(),
            ],
        ]);
    }
}

Подключение к ресурсу

Метод rows() добавляет кнопку действия в строку таблицы и на страницу просмотра записи:

public function actions(FrameRequest $request): Actions
{
    return Actions::make()
        ->rows([
            PaymentSuccessOrderAction::make(),
        ]);
}

Метод table() добавляет действие к таблице целиком (например, экспорт всех записей):

public function actions(FrameRequest $request): Actions
{
    return Actions::make()
        ->table([
            ExportOrdersAction::make(),
        ]);
}

Параметры

title
?string
Название действия, отображается на кнопке.
description
?string
Описание действия, отображается в модальном окне подтверждения.
name
?string
Уникальное имя действия. Используется системой для идентификации.
confirmed
bool
Включает подтверждение действия через диалоговое окно. По умолчанию true.
confirmText
string
Текст вопроса в диалоговом окне подтверждения.
confirmButtonText
string
Текст кнопки подтверждения.
cancelButtonText
string
Текст кнопки отмены.
model
?string
Класс модели Eloquent, связанной с действием. Используется для автоматического разрешения моделей.
chunkSize
int
Размер пакета при обработке большого количества записей. По умолчанию 100.
batchId
?string
UUID текущего пакетного задания. Заполняется автоматически.
icon
?string
Иконка на кнопке действия. Каталог — tabler icons.

Встроенные действия

Frame поставляет готовые классы для типовых операций над записями. Они уже подключены в базовом ресурсе; целевой ресурс задаётся методом forResource().

ReplicateResourceAction
Дублирует запись: создаёт копию модели, сохраняет её и возвращает составной результат — тост «Копия создана» и переход в редактор копии.
DeleteResourceAction
Удаляет запись. Разрушающее действие: всегда требует подтверждения. Для моделей с мягким удалением выступает архивированием.
DetachResourceAction
Отвязывает запись от связанного ресурса (для отношений). Сама запись не удаляется — разрывается только связь.
BulkUpdateAction
Групповое действие: применяет значения формы ко всем выбранным записям. Поля задаются методом withFields(). Для полей с ->editable() такие групповые действия генерируются автоматически.
public function actions(FrameRequest $request): Actions
{
    return parent::actions($request)->rows([
        ReplicateResourceAction::make()
            ->forResource(self::class),
    ]);
}
// Групповое действие над выбранными записями
BulkUpdateAction::make('Изменить статус')
    ->withFields([
        Select::make('status', 'Статус')->options([...]),
    ]);

Любое действие, реализующее Illuminate\Contracts\Queue\ShouldQueue, выполняется в фоне через очередь — постановка в очередь и запись событий выполняются автоматически.

Секции действий

Метод actions() раскладывает действия по секциям — каждая отвечает за своё место в интерфейсе. Сигнатура у всех одинаковая: (array $actions, ?bool $merge = true): Actions.

rows
Действия для одной строки (меню записи). Сюда попадают Delete/Detach и пользовательские построчные действия.
group
Массовые (bulk) действия над выбранными строками. Для полей с ->editable() групповые действия генерируются автоматически.
table
Действия уровня таблицы — не привязаны к конкретной записи.
inline
Инлайновые действия. Встроенных наполнителей нет — задаются вручную.

По умолчанию каждая секция дополняет унаследованные действия. Передайте merge: false, чтобы заменить набор целиком:

public function actions(FrameRequest $request): Actions
{
    return parent::actions($request)
        ->rows([
            ReplicateResourceAction::make()->forResource(self::class),
        ])
        ->group([
            BulkUpdateAction::make('Изменить статус')
                ->withFields([
                    Select::make('status', 'Статус')->options([...]),
                ]),
        ]);
}