- Основы
- Кнопка создания
- Кнопка детального просмотра
- Кнопка редактирования
- Кнопка удаления
- Кнопка массового удаления
- Кнопка экспорта
- Кнопка импорта
- Кнопка фильтров
- Кнопки форм
- Кнопки на странице индекса
- Кнопки элемента
- Кнопки в таблице индекса
- Кнопки на странице формы
- Кнопки на странице детального просмотра
Основы
Кнопки отображаются на страницах ресурса: на странице индекса, страницах форм (создание/редактирование) и странице детального просмотра.
Они отвечают за основные действия с элементами и являются компонентами ActionButton
.
В админ-панели MoonShine существует множество методов, которые позволяют переопределить ресурс как отдельную кнопку, так и всю группу.
Более подробная информация о компоненте ActionButton.
Кнопки для создания, просмотра, редактирования, удаления и массового удаления размещены в отдельных классах, чтобы применить к ним все необходимые методы и тем самым устранить дублирование, поскольку эти кнопки также используются в HasMany, BelongsToMany и т.д.
Кнопка создания
Модификация
Метод modifyCreateButton()
позволяет модифицировать кнопку для создания нового элемента.
use MoonShine\ActionButtons\ActionButton; protected function modifyCreateButton(ActionButton $button): ActionButton{ return $button->error();}
Переопределение
Метод getCreateButton()
позволяет переопределить кнопку для создания нового элемента.
use MoonShine\ActionButtons\ActionButton;use MoonShine\Buttons\CreateButton; public function getCreateButton(?string $componentName = null, bool $isAsync = false): ActionButton{ return CreateButton::for( $this, componentName: $componentName, isAsync: $isAsync );}
Кнопка детального просмотра
Модификация
Метод modifyDetailButton()
позволяет модифицировать кнопку детального просмотра элемента.
use MoonShine\ActionButtons\ActionButton; protected function modifyDetailButton(ActionButton $button): ActionButton{ return $button->warning();}
Переопределение
Метод getDetailButton()
позволяет переопределить кнопку детального просмотра элемента.
use MoonShine\ActionButtons\ActionButton;use MoonShine\Buttons\DetailButton; public function getDetailButton(bool $isAsync = false): ActionButton{ return DetailButton::for( $this, isAsync: $isAsync );}
Кнопка редактирования
Модификация
Метод modifyEditButton()
позволяет модифицировать кнопку редактирования элемента.
use MoonShine\ActionButtons\ActionButton; protected function modifyEditButton(ActionButton $button): ActionButton{ return $button->icon('heroicons.pencil-square');}
Переопределение
Метод getEditButton()
позволяет переопределить кнопку редактирования элемента.
use MoonShine\ActionButtons\ActionButton;use MoonShine\Buttons\EditButton; public function getEditButton(?string $componentName = null, bool $isAsync = false): ActionButton{ return EditButton::for( $this, componentName: $componentName, isAsync: $isAsync );}
Кнопка удаления
Модификация
Метод modifyDeleteButton()
позволяет модифицировать кнопку удаления элемента.
use MoonShine\ActionButtons\ActionButton; protected function modifyDeleteButton(ActionButton $button): ActionButton{ return $button->icon('heroicons.x-mark');}
Переопределение
Метод getDeleteButton()
позволяет переопределить кнопку удаления элемента.
use MoonShine\ActionButtons\ActionButton;use MoonShine\Buttons\DeleteButton; public function getDeleteButton( ?string $componentName = null, string $redirectAfterDelete = '', bool $isAsync = false): ActionButton { return DeleteButton::for( $this, componentName: $componentName, redirectAfterDelete: $isAsync ? '' : $redirectAfterDelete, isAsync: $isAsync );}
Кнопка массового удаления
Модификация
Метод modifyMassDeleteButton()
позволяет модифицировать кнопку массового удаления.
use MoonShine\ActionButtons\ActionButton; protected function modifyMassDeleteButton(ActionButton $button): ActionButton{ return $button->icon('heroicons.x-mark');}
Переопределение
Метод getMassDeleteButton()
позволяет переопределить кнопку массового удаления.
use MoonShine\ActionButtons\ActionButton;use MoonShine\Buttons\MassDeleteButton; public function getMassDeleteButton( ?string $componentName = null, string $redirectAfterDelete = '', bool $isAsync = false): ActionButton { return MassDeleteButton::for( $this, componentName: $componentName, redirectAfterDelete: $isAsync ? '' : $redirectAfterDelete, isAsync: $isAsync );}
Кнопка экспорта
Модификация
Метод modifyExportButton()
позволяет модифицировать кнопку экспорта.
use MoonShine\ActionButtons\ActionButton; protected function modifyExportButton(ActionButton $button): ActionButton{ return $button->secondary();}
Переопределение
Метод getExportButton()
позволяет переопределить кнопку экспорта.
use MoonShine\ActionButtons\ActionButton;use MoonShine\Buttons\ExportButton; public function getExportButton(): ActionButton{ return ExportButton::for($this, export: $this->export());}
Кнопка импорта
Модификация
Метод modifyImportButton()
позволяет модифицировать кнопку импорта.
use MoonShine\ActionButtons\ActionButton; protected function modifyImportButton(ActionButton $button): ActionButton{ return $button->error();}
Переопределение
Метод getImportButton()
позволяет переопределить кнопку импорта.
use MoonShine\ActionButtons\ActionButton;use MoonShine\Buttons\ImportButton; public function getImportButton(): ActionButton{ return ImportButton::for($this, import: $this->import());}
Кнопка фильтров
Модификация
Метод modifyFiltersButton()
позволяет модифицировать кнопку фильтров.
use MoonShine\ActionButtons\ActionButton; protected function modifyFiltersButton(ActionButton $button): ActionButton{ return $button->error();}
Переопределение
Метод getFiltersButton()
позволяет переопределить кнопку фильтров.
use MoonShine\ActionButtons\ActionButton;use MoonShine\Buttons\FiltersButton; public function getFiltersButton(): ActionButton{ return FiltersButton::for($this);}
Кнопки форм
Метод getFormBuilderButtons()
позволяет добавить дополнительные кнопки в форму создания или редактирования.
namespace MoonShine\Resources; use MoonShine\ActionButtons\ActionButton;use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ //... public function getFormBuilderButtons(): array { return [ ActionButton::make('Back', fn() => $this->indexPageUrl())->customAttributes(['class' => 'btn-lg']) ]; } //...}
Кнопки на странице индекса
По умолчанию на странице индекса ресурса модели есть только кнопка создания.
Метод actions()
позволяет добавить дополнительные кнопки.
namespace MoonShine\Resources; use MoonShine\ActionButtons\ActionButton;use MoonShine\Enums\JsEvent;use MoonShine\Resources\ModelResource;use MoonShine\Support\AlpineJs; class PostResource extends ModelResource{ //... public function actions(): array { return [ ActionButton::make('Refresh', '#') ->dispatchEvent(AlpineJs::event(JsEvent::TABLE_UPDATED, 'index-table')) ]; } //...}
Кнопки элемента
Метод buttons()
позволяет указать дополнительные кнопки, которые будут отображаться в таблице индекса, в формах создания и редактирования, а также на детальной странице, если они не переопределены для страниц соответствующими методами indexButton()
, formButtons()
и detailButtons()
.
namespace MoonShine\Resources; use MoonShine\ActionButtons\ActionButton;use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ //... public function buttons(): array { return [ ActionButton::make('Link', '/endpoint') ]; } //...}
Кнопки в таблице индекса
Для добавления кнопок в таблицу индекса используйте метод indexButtons()
.
namespace MoonShine\Resources; use MoonShine\ActionButtons\ActionButton;use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ //... public function indexButtons(): array { return [ ActionButton::make( 'Link', fn(Model $item) => '/endpoint?id=' . $item->getKey() ) ]; } //...}
Пример создания пользовательских кнопок для таблицы индекса в разделе Рецепты
Для массовых действий с элементами необходимо добавить метод bulk()
public function indexButtons(): array{ return [ ActionButton::make('Link', '/endpoint') ->bulk() ];}
Переопределение группы
Если вы хотите полностью изменить все кнопки элементов в таблице индекса, то необходимо переопределить метод getIndexItemButtons()
в ресурсе.
namespace MoonShine\Resources; use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ //... public function getIndexItemButtons(): array { return [ ...$this->getIndexButtons(), $this->getDetailButton( isAsync: $this->isAsync() ), $this->getEditButton( isAsync: $this->isAsync() ), $this->getDeleteButton( redirectAfterDelete: $this->redirectAfterDelete(), isAsync: $this->isAsync() ), $this->getMassDeleteButton( redirectAfterDelete: $this->redirectAfterDelete(), isAsync: $this->isAsync() ), ]; } //...}
Кнопки на странице формы
Чтобы добавить кнопки на страницу с формой, используйте метод formButtons()
.
namespace MoonShine\Resources; use MoonShine\ActionButtons\ActionButton;use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ //... public function formButtons(): array { return [ ActionButton::make('Link')->method('updateSomething') ]; } //...}
Переопределение группы
Если вы хотите полностью изменить все кнопки элемента на странице формы, то необходимо переопределить метод getFormItemButtons()
в ресурсе.
namespace MoonShine\Resources; use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ //... public function getFormItemButtons(): array { return [ ...$this->getFormButtons(), $this->getDetailButton(), $this->getDeleteButton( redirectAfterDelete: $this->redirectAfterDelete(), isAsync: false ), ]; } //...}
Кнопки на странице детального просмотра
Чтобы добавить кнопки на страницу детального просмотра, используйте метод detailButtons()
.
namespace MoonShine\Resources; use MoonShine\ActionButtons\ActionButton;use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ //... public function detailButtons(): array { return [ ActionButton::make('Link', '/endpoint') ]; } //...}
Переопределение группы
Если вы хотите полностью изменить все кнопки элемента на странице детального просмотра, то необходимо переопределить метод getDetailItemButtons()
в ресурсе.
namespace MoonShine\Resources; use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ //... public function getDetailItemButtons(): array { return [ ...$this->getDetailButtons(), $this->getEditButton( isAsync: $this->isAsync(), ), $this->getDeleteButton( redirectAfterDelete: $this->redirectAfterDelete(), isAsync: false ), ]; } //...}