- Основы
- Создание класса
- Заголовок
- Компоненты
- Хлебные крошки
- Макет
- Псевдоним
- Рендеринг
- Перед рендерингом
Основы
Page является основой админ-панели MoonShine. Основное назначение Page - отображение компонентов.
Страницы с одинаковой логикой могут быть объединены в Resource
.
Создание класса
Для создания класса страницы можно использовать консольную команду:
php artisan moonshine:page
После ввода имени класса будет создан файл, который является основой для страницы в админ-панели.
По умолчанию он располагается в директории app/MoonShine/Pages
.
Вы можете указать имя класса и директорию его расположения в команде.
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 = 'Подзаголовок'; //...}
Если для заголовка и подзаголовка требуется какая-то логика, то методы 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 ?: 'Подзаголовок'; } //...}
Компоненты
Страница строится из компонентов, которыми могут быть как декорации и компоненты самой админ-панели, 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), ]) ]; } //...}
Для более подробной информации обратитесь к разделу Компоненты.
Хлебные крошки
За генерацию хлебных крошек отвечает метод breadcrumbs()
.
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'; //...}
Layout также можно переопределить с помощью метода 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; //...}
Также можно переопределить метод getAlias()
.
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(); }}
Или с Fortify
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); } }}