Компоненты

Основы

Описание

Практически всё в MoonShine это компоненты. Сами MoonShineComponent являются Blade компонентами и содержат дополнительные удобные методы для взаимодействия в административной панели.

Условные методы

Отображать компонент можно по условию, воспользовавшись методом canSee().

Box::make()
->canSee(function (Box $ctx) {
return true;
})

Метод when() реализует fluent interface и выполнит callback, когда первый аргумент, переданный методу, имеет значение true.

when(
$value = null,
?callable $callback = null,
?callable $default = null,
)
Box::make()
->when(fn() => true, fn(Box $ctx) => $ctx)

Метод unless() обратный методу when().

unless(
$value = null,
?callable $callback = null,
?callable $default = null,
)

Изменение отображения

Когда необходимо изменить view с помощью fluent interface можно воспользоваться методом customView().

customView(
string $view,
array $data = []
)
Box::make('Title', [])
->customView('component.my-custom-block')

Хук до рендера

Если вам необходимо получить доступ к компоненту непосредственно перед рендером, для этого можно воспользоваться методом onBeforeRender().

/**
* @param Closure(static $ctx): void $onBeforeRender
*/
onBeforeRender(Closure $onBeforeRender)
Box::make('Title', [])
->onBeforeRender(function(Box $ctx) {
// ...
})

Ассеты

Для добавления ассетов на лету можно использовать метод addAssets().

Box::make()
->addAssets([
new Css(Vite::asset('resources/css/block.css'))
])

Если вы реализуете собственный компонент, то объявить набор ассетов в нем можно двумя способами.

  1. Через метод assets():
/**
* @return list<AssetElementContract>
*/
protected function assets(): array
{
return [
Js::make('/js/custom.js'),
Css::make('/css/styles.css'),
];
}
  1. Через метод booted():
protected function booted(): void
{
parent::booted();
 
$this->getAssetManager()
->add(Css::make('/css/app.css'))
->append(Js::make('/js/app.js'));
}

Трейт Macroable

Всем компонентам доступен трейт Illuminate\Support\Traits\Macroable с методами mixin() и macro(). С помощью этого трейта вы можете расширять возможности компонентов, добавляя в них новый функционал без использования наследования.

MoonShineComponent::macro('myMethod', fn() => /*реализация*/)
 
Box::make()->myMethod()

или

// для всех
MoonShineComponent::mixin(new MyNewMethods())
 
// для конкретного
Box::mixin(new MyNewMethods())

Кастомный компонент

Вы можете создать собственный компонент, со своим view и логикой и использовать его в административной панели MoonShine. Для этого воспользуйтесь командой:

php artisan moonshine:component

О всех поддерживаемых опциях можно узнать в разделе Команды.