Создание класса

# Основы

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);
}
}
}