# Основы
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 = '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 ?: '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('Title 1', 'Text 1') ]) ])->columnSpan(6), Column::make([ Block::make([ TextBlock::make('Title 2', 'Text 2') ]) ])->columnSpan(6), ]) ]; } //...}
За более подробной информацией обратитесь к разделу Components .
# Хлебные крошки
Метод breadcrumbs()
отвечает за генерацию хлебных крошек.
use MoonShine\Pages\Page; class CustomPage extends Page{ // ... public function breadcrumbs(): array { return [ '#' => $this->title() ]; } //...}
# Layout
По умолчанию страницы используют дефолтный шаблон отображения 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
Если требуется изменить алиас страницы,
то это можно сделать через свойство 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'; } //...}
# Render
Вы можете отображать страницу и вне MoonShine, скажем просто вернув ее в Controller
use MoonShine\Pages\Page; class ProfileController extends Controller{ public function __invoke(): Page { return ProfilePage::make(); } }
Или скажем с Fortify
Fortify::loginView(static fn() => LoginPage::make());
# beforeRender
Метод 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); } } }