В ресурсах
Действия в ресурсах предназначены для бизнес-операций над одной или несколькими записями: изменение статуса, экспорт данных, отправка уведомлений и т.д.
Пример
Класс, который помечает заказ как оплаченный:
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(),
]);
}
Параметры
true.100.Встроенные действия
Frame поставляет готовые классы для типовых операций над записями. Они уже подключены в базовом ресурсе; целевой ресурс задаётся методом forResource().
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.
->editable() групповые действия генерируются автоматически.По умолчанию каждая секция дополняет унаследованные действия. Передайте 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([...]),
]),
]);
}