Реализуем функционал клонирования записей в ресурсе асинхронно через `ActionButton` .
После клонирования записи можно пойти 2мя путями, либо выполнить редирект на редактирование созданной записи, либо вызвать событие релоада таблицы, чтобы увидеть новую запись без перезагрузки страницы. В данном примере я пошёл первым путём :)
Внимание! Если у модели есть уникальный ключ кроме первичного ключа, то при попытке клонирования (репликации) будет ошибка на уровне SQL.
protected function indexButtons(): ListOf
{
return parent::indexButtons()
->add(
ActionButton::make('Clone')
->icon('document-duplicate')
->method('duplicateRow')
->withConfirm()
);
}
public static function duplicateRow(MoonShineRequest $request)
{
$resource = $request->getResource();
/** @var Model $newItem */
$newItem = $resource?->getItem()->replicate();
$newItem->save();
$url = $resource?->getFormPageUrl($newItem->id);
return MoonShineJsonResponse::make()->redirect($url);
}
Оставить комментарий