Действия
Вспомогательные функции
Методы для создания, настройки и обработки действий
Создание и настройка
make
mixed ...$args → static
Универсальный фабричный метод. Принимает любое количество аргументов, которые передаются в конструктор класса. Эквивалентен
new, но обеспечивает более чистый синтаксис.action
callable $callback → static
Задаёт обработчик действия в виде callable-функции вместо создания отдельного класса.
icon
string $icon → static
Устанавливает иконку для действия. Отображается рядом с кнопкой или в меню. Каталог иконок — lucide.dev.
confirmed
?bool $val = true → static
Включает/выключает подтверждение действия через диалоговое окно.
can
string|callable $ability → static
Задаёт правило проверки прав доступа к действию.
// Инлайн-действие
Action::make('Рассчитать возраст')
->icon('tabler-sparkles')
->confirmed()
->can('admin')
->action(function (FrameRequest $request, array $state) {
...
return Action::set(['description' => $description]);
});
// Отдельный класс
YouClass::make()
Мета параметры
meta
→ array
Возвращает мета-информацию действия.
withMeta
array $meta → static
Передаёт дополнительные параметры клиенту.
YouClass::make()->withMeta([
'accept' => ['application/pdf', 'application/json'],
])
Обработчик действия
handle
LazyCollection $models, ActionFields $fields → ?ActionResult
Основной метод с бизнес-логикой. Переопределяется в пользовательских классах действий. Применяется к отобранным моделям.
public function handle(LazyCollection $models, ActionFields $fields): ?ActionResult
{
$model = $models->first();
$model->cancelOrder();
return self::push([
'name' => 'resource.detail',
'params' => [
'resource' => 'orders',
'id' => $model->getKey(),
],
]);
}
Результаты действий
Методы ниже возвращают ActionResult и определяют, что произойдёт после выполнения действия.
redirect
string $value, bool $newPage = false → ActionResult
Перенаправляет пользователя по указанному URL. Второй параметр:
false — текущая вкладка, true — новая вкладка.push
array $value → ActionResult
Внутреннее перенаправление в приложении (например, на страницу деталей ресурса).
message
string $value → ActionResult
Завершает действие с информационным сообщением для пользователя.
error
string $value → ActionResult
Прерывает действие с сообщением об ошибке.
set
array $value → ActionResult
Патчит состояние текущей формы — заданные ключи перезаписываются возвращёнными значениями. Применяется в действиях над полями формы.
compose
ActionResult ...$results → ActionResult
Объединяет несколько результатов в один ответ. Клиент применяет их по порядку, поэтому из одного
handle() можно одновременно показать тост, пропатчить форму (set) и сделать переход (push/redirect). Вложенные compose разворачиваются автоматически.openAction
string $name, array $prefill = [] → ActionResult
Открывает на клиенте другое действие, не перезагружая страницу. Второй параметр предзаполняет его форму. Позволяет выстраивать цепочки действий.
attachments
string $value, array $attachments → ActionResult
Возвращает результат с сообщением и массивом вложений (например, сгенерированных файлов для скачивания).
custom
string $action, mixed $value = null → ActionResult
Возвращает кастомный ответ. Принимает название события и данные.
// Перенаправление на внешний URL в новой вкладке
return self::redirect((string) $redirectUrl, true);
// Информационное сообщение
return self::message('Заказ опубликован');
// Ошибка
return self::error('Заказ уже опубликован');
// Несколько результатов из одного handle(): тост И переход в редактор копии
return self::compose(
self::message('Копия создана'),
self::push([
'name' => 'resources.record.editing',
'params' => ['resource' => 'orders', 'id' => $clone->getKey()],
]),
);
Представление формы
Действия с полями формы умеют менять способ её показа.
slideOver
bool $val = true → static
Открывает форму действия в выезжающей справа панели (slide-over) вместо центрированного модального окна. Удобно для форм с большим числом полей.
fillForm
array $values → static
Предзаполняет форму действия при открытии. Значения подставляются в состояние формы, переопределяя значения полей по умолчанию.
PageNoteAction::make()
->slideOver()
->fillForm(['note' => 'Шаблон: проверить SEO, обновить контент…']);