- Описание
- Условные методы
- Изменение отображения
- Хук до рендера
- Ассеты
- Трейт Macroable
- Кастомный компонент
Описание
Практически всё в MoonShine это компоненты.
Сами MoonShineComponent
являются Blade компонентами и содержат дополнительные удобные методы для взаимодействия в административной панели.
Условные методы
Отображать компонент можно по условию, воспользовавшись методом canSee()
.
Box::make()->canSee(function (Box $ctx) {return true;})
Box::make()->canSee(function (Box $ctx) {return true;})
Метод when()
реализует fluent interface и выполнит callback, когда первый аргумент, переданный методу, имеет значение true.
when($value = null,?callable $callback = null,?callable $default = null,)
when($value = null,?callable $callback = null,?callable $default = null,)
Box::make()->when(fn() => true, fn(Box $ctx) => $ctx)
Box::make()->when(fn() => true, fn(Box $ctx) => $ctx)
Метод unless()
обратный методу when()
.
unless($value = null,?callable $callback = null,?callable $default = null,)
unless($value = null,?callable $callback = null,?callable $default = null,)
Изменение отображения
Когда необходимо изменить view с помощью fluent interface можно воспользоваться методом customView()
.
customView(string $view,array $data = [])
customView(string $view,array $data = [])
Box::make('Title', [])->customView('component.my-custom-block')
Box::make('Title', [])->customView('component.my-custom-block')
Хук до рендера
Если вам необходимо получить доступ к компоненту непосредственно перед рендером, для этого можно воспользоваться методом onBeforeRender()
.
/*** @param Closure(static $ctx): void $onBeforeRender*/onBeforeRender(Closure $onBeforeRender)
/*** @param Closure(static $ctx): void $onBeforeRender*/onBeforeRender(Closure $onBeforeRender)
Box::make('Title', [])->onBeforeRender(function(Box $ctx) {// ...})
Box::make('Title', [])->onBeforeRender(function(Box $ctx) {// ...})
Ассеты
Для добавления ассетов на лету можно использовать метод addAssets()
.
Box::make()->addAssets([new Css(Vite::asset('resources/css/block.css'))])
Box::make()->addAssets([new Css(Vite::asset('resources/css/block.css'))])
Если вы реализуете собственный компонент, то объявить набор ассетов в нем можно двумя способами.
- Через метод
assets()
:
/*** @return list<AssetElementContract>*/protected function assets(): array{return [Js::make('/js/custom.js'),Css::make('/css/styles.css'),];}
/*** @return list<AssetElementContract>*/protected function assets(): array{return [Js::make('/js/custom.js'),Css::make('/css/styles.css'),];}
- Через метод
booted()
:
protected function booted(): void{parent::booted();$this->getAssetManager()->add(Css::make('/css/app.css'))->append(Js::make('/js/app.js'));}
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::macro('myMethod', fn() => /*реализация*/)Box::make()->myMethod()
или
// для всехMoonShineComponent::mixin(new MyNewMethods())// для конкретногоBox::mixin(new MyNewMethods())
// для всехMoonShineComponent::mixin(new MyNewMethods())// для конкретногоBox::mixin(new MyNewMethods())
Кастомный компонент
Вы можете создать собственный компонент, со своим view и логикой и использовать его в административной панели MoonShine. Для этого воспользуйтесь командой:
php artisan moonshine:component
php artisan moonshine:component
О всех поддерживаемых опциях можно узнать в разделе Команды.