- Основы
- Создание класса
- Заголовок
- Компоненты
- Хлебные крошки
- Макет
- Псевдоним
- Рендеринг
- Перед рендерингом
Основы
Page является основой админ-панели MoonShine. Основное назначение Page - отображение компонентов.
Страницы с одинаковой логикой могут быть объединены в Resource
.
Создание класса
Для создания класса страницы можно использовать консольную команду:
php artisan moonshine:page
php artisan moonshine:page
После ввода имени класса будет создан файл, который является основой для страницы в админ-панели.
По умолчанию он располагается в директории app/MoonShine/Pages
.
Вы можете указать имя класса и директорию его расположения в команде.
php artisan moonshine:page OrderStatistics --dir=Pages/Statistics
php artisan moonshine:page OrderStatistics --dir=Pages/Statistics
Файл OrderStatistics
будет создан в директории app/MoonShine/Pages/Statistics
.
Заголовок
Заголовок страницы можно задать через свойство title
, а subtitle
задает подзаголовок.
use MoonShine\Pages\Page;class CustomPage extends Page{protected string $title = 'CustomPage';protected string $subtitle = 'Подзаголовок';//...}
use MoonShine\Pages\Page;class CustomPage extends Page{protected string $title = 'CustomPage';protected string $subtitle = 'Подзаголовок';//...}
Если для заголовка и подзаголовка требуется какая-то логика, то методы title()
и subtitle()
позволяют ее реализовать.
use MoonShine\Pages\Page;class CustomPage extends Page{// ...public function title(): string{return $this->title ?: 'CustomPage';}public function subtitle(): string{return $this->subtitle ?: 'Подзаголовок';}//...}
use MoonShine\Pages\Page;class CustomPage extends Page{// ...public function title(): string{return $this->title ?: 'CustomPage';}public function subtitle(): string{return $this->subtitle ?: 'Подзаголовок';}//...}
Компоненты
Страница строится из компонентов, которыми могут быть как декорации и компоненты самой админ-панели, FormBuilder, TableBuilder, так и просто blade компоненты, и даже компоненты Livewire.
Для регистрации компонентов страницы используется метод components()
.
use MoonShine\Decorations\Block;use MoonShine\Decorations\Column;use MoonShine\Decorations\Grid;use MoonShine\Decorations\TextBlock;use MoonShine\Pages\Page;class CustomPage extends Page{// ...public function components(): array{return [Grid::make([Column::make([Block::make([TextBlock::make('Заголовок 1', 'Текст 1')])])->columnSpan(6),Column::make([Block::make([TextBlock::make('Заголовок 2', 'Текст 2')])])->columnSpan(6),])];}//...}
use MoonShine\Decorations\Block;use MoonShine\Decorations\Column;use MoonShine\Decorations\Grid;use MoonShine\Decorations\TextBlock;use MoonShine\Pages\Page;class CustomPage extends Page{// ...public function components(): array{return [Grid::make([Column::make([Block::make([TextBlock::make('Заголовок 1', 'Текст 1')])])->columnSpan(6),Column::make([Block::make([TextBlock::make('Заголовок 2', 'Текст 2')])])->columnSpan(6),])];}//...}
Для более подробной информации обратитесь к разделу Компоненты.
Хлебные крошки
За генерацию хлебных крошек отвечает метод breadcrumbs()
.
use MoonShine\Pages\Page;class CustomPage extends Page{// ...public function breadcrumbs(): array{return ['#' => $this->title()];}//...}
use MoonShine\Pages\Page;class CustomPage extends Page{// ...public function breadcrumbs(): array{return ['#' => $this->title()];}//...}
Макет
По умолчанию страницы используют шаблон отображения Layout по умолчанию, но вы можете его изменить через свойство layout
.
use MoonShine\Pages\Page;class CustomPage extends Page{protected string $layout = 'moonshine::layouts.app';//...}
use MoonShine\Pages\Page;class CustomPage extends Page{protected string $layout = 'moonshine::layouts.app';//...}
Layout также можно переопределить с помощью метода layout()
.
use MoonShine\Pages\Page;class CustomPage extends Page{public function layout(): string{return $this->layout;}//...}
use MoonShine\Pages\Page;class CustomPage extends Page{public function layout(): string{return $this->layout;}//...}
Псевдоним
Если необходимо изменить псевдоним страницы, это можно сделать через свойство alias
.
use MoonShine\Pages\Page;class CustomPage extends Page{protected ?string $alias = null;//...}
use MoonShine\Pages\Page;class CustomPage extends Page{protected ?string $alias = null;//...}
Также можно переопределить метод getAlias()
.
use MoonShine\Pages\Page;class CustomPage extends Page{public function getAlias(): ?string{return 'custom_page';}//...}
use MoonShine\Pages\Page;class CustomPage extends Page{public function getAlias(): ?string{return 'custom_page';}//...}
Рендеринг
Вы можете отображать страницу вне MoonShine, просто вернув ее в Контроллере
use MoonShine\Pages\Page;class ProfileController extends Controller{public function __invoke(): Page{return ProfilePage::make();}}
use MoonShine\Pages\Page;class ProfileController extends Controller{public function __invoke(): Page{return ProfilePage::make();}}
Или с Fortify
Fortify::loginView(static fn() => LoginPage::make());
Fortify::loginView(static fn() => LoginPage::make());
Перед рендерингом
Метод beforeRender()
позволяет выполнить какие-либо действия перед отображением страницы.
use MoonShine\Models\MoonshineUserRole;use MoonShine\Pages\Page;class CustomPage extends Page{public function beforeRender(): void{if (auth()->user()->moonshine_user_role_id !== MoonshineUserRole::DEFAULT_ROLE_ID) {abort(403);}}}
use MoonShine\Models\MoonshineUserRole;use MoonShine\Pages\Page;class CustomPage extends Page{public function beforeRender(): void{if (auth()->user()->moonshine_user_role_id !== MoonshineUserRole::DEFAULT_ROLE_ID) {abort(403);}}}