Меню

Меню

Основы

Навигационное меню настраивается в App\Providers\MoonShineServiceProvider через метод menu(), который возвращает массив элементов меню.

Чтобы добавить пункт меню, необходимо использовать класс MoonShine\Menu\MenuItem и его статический метод make().

MenuItem::make(Closure|string $label, Closure|MenuFiller|string $filler, null|string $icon = null, Closure|bool $blank = false)
MenuItem::make(Closure|string $label, Closure|MenuFiller|string $filler, null|string $icon = null, Closure|bool $blank = false)

$label - название пункта меню $filler - элемент для формирования url $icon - иконка для пункта меню, $blank - открыть в новой вкладке.

В качестве второго параметра можно передать ModelResource, Page или Resource.

namespace App\Providers;
 
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('Администраторы', new MoonShineUserResource()),
MenuItem::make('Главная', fn() => route('home')),
MenuItem::make('Документация', 'https://moonshine-laravel.com/docs'),
MenuItem::make('Документация Laravel', 'https://laravel.com/docs', blank: true)
];
}
 
//...
}
namespace App\Providers;
 
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('Администраторы', new MoonShineUserResource()),
MenuItem::make('Главная', fn() => route('home')),
MenuItem::make('Документация', 'https://moonshine-laravel.com/docs'),
MenuItem::make('Документация Laravel', 'https://laravel.com/docs', blank: true)
];
}
 
//...
}

Если меню создается для ModelResource или Resource, то пункт меню будет использовать первую страницу, объявленную в методе pages().

Меню через Closure

Вы можете объявить меню, используя замыкание на основе текущего запроса:

namespace App\Providers;
 
use Closure;
use MoonShine\MoonShineRequest;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): Closure
{
return static function (MoonShineRequest $request) {
return [
//...
];
};
};
 
//...
}
namespace App\Providers;
 
use Closure;
use MoonShine\MoonShineRequest;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): Closure
{
return static function (MoonShineRequest $request) {
return [
//...
];
};
};
 
//...
}

Это будет полезно, если вы решите использовать мультитенантность или если у вас реализованы как веб, так и админ части на MoonShine.

При объявлении меню с использованием Closure необходимо вручную зарегистрировать страницы и ресурсы в соответствующих методах.

Группы

Пункты меню можно объединять в группы. Для этого используйте класс MoonShine\Menu\MenuGroup со статическим методом make().

MenuGroup::make(Closure|string $label, iterable $items, null|string $icon = null)
MenuGroup::make(Closure|string $label, iterable $items, null|string $icon = null)

$label - название группы $items - массив компонентов меню $icon - иконка для группы.

namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
use MoonShine\Resources\MoonShineUserRoleResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make('Система', [
MenuItem::make('Администраторы', new MoonShineUserResource()),
MenuItem::make('Роли', new MoonShineUserRoleResource()),
])
];
}
 
//...
}
namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
use MoonShine\Resources\MoonShineUserRoleResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make('Система', [
MenuItem::make('Администраторы', new MoonShineUserResource()),
MenuItem::make('Роли', new MoonShineUserRoleResource()),
])
];
}
 
//...
}

menu menu_dark

Вы также можете добавлять элементы в группу, используя метод setItems()

setItems(iterable $items)
setItems(iterable $items)
namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
use MoonShine\Resources\MoonShineUserRoleResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make('Система')->setItems([
MenuItem::make('Администраторы', new MoonShineUserResource()),
MenuItem::make('Роли', new MoonShineUserRoleResource()),
])
];
}
 
//...
}
namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
use MoonShine\Resources\MoonShineUserRoleResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make('Система')->setItems([
MenuItem::make('Администраторы', new MoonShineUserResource()),
MenuItem::make('Роли', new MoonShineUserRoleResource()),
])
];
}
 
//...
}

Для создания многоуровневого меню группы можно вкладывать друг в друга.

Атрибуты

Метод customAttributes() позволяет добавлять собственные атрибуты для групп и пунктов меню.

customAttributes(array $attributes)
customAttributes(array $attributes)
namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
use MoonShine\Resources\MoonShineUserRoleResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make(static fn () => __('moonshine::ui.resource.system'), [
MenuItem::make(
static fn () => __('moonshine::ui.resource.admins_title'),
new MoonShineUserResource()
),
MenuItem::make(
static fn () => __('moonshine::ui.resource.role_title'),
new MoonShineUserRoleResource()
)
->customAttributes(['class' => 'group-li-custom-class']),
])
->customAttributes(['class' => 'group-li-custom-class'])
];
}
 
//...
}
namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
use MoonShine\Resources\MoonShineUserRoleResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make(static fn () => __('moonshine::ui.resource.system'), [
MenuItem::make(
static fn () => __('moonshine::ui.resource.admins_title'),
new MoonShineUserResource()
),
MenuItem::make(
static fn () => __('moonshine::ui.resource.role_title'),
new MoonShineUserRoleResource()
)
->customAttributes(['class' => 'group-li-custom-class']),
])
->customAttributes(['class' => 'group-li-custom-class'])
];
}
 
//...
}

Метод linkAttributes() позволяет добавлять атрибуты к тегу ссылки a.

linkAttributes(array $attributes)
linkAttributes(array $attributes)
namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
use MoonShine\Resources\MoonShineUserRoleResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make(static fn () => __('moonshine::ui.resource.system'), [
MenuItem::make(
static fn () => __('moonshine::ui.resource.admins_title'),
new MoonShineUserResource()
)
->linkAttributes(['class' => 'group-a-custom-class']),
MenuItem::make(
static fn () => __('moonshine::ui.resource.role_title'),
new MoonShineUserRoleResource()
),
])
->linkAttributes(['class' => 'group-button-custom-class'])
];
}
 
//...
}
namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
use MoonShine\Resources\MoonShineUserRoleResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make(static fn () => __('moonshine::ui.resource.system'), [
MenuItem::make(
static fn () => __('moonshine::ui.resource.admins_title'),
new MoonShineUserResource()
)
->linkAttributes(['class' => 'group-a-custom-class']),
MenuItem::make(
static fn () => __('moonshine::ui.resource.role_title'),
new MoonShineUserRoleResource()
),
])
->linkAttributes(['class' => 'group-button-custom-class'])
];
}
 
//...
}

Разделитель

Пункты меню можно визуально разделить с помощью MoonShine\Menu\MenuDivider.

MenuDivider::make(Closure|string $label = '')
MenuDivider::make(Closure|string $label = '')
namespace App\Providers;
 
use App\MoonShine\Resources\ArticleResource;
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Menu\MenuDivider;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('Администраторы', new MoonShineUserResource()),
MenuDivider::make(),
MenuItem::make('Роли', new MoonShineUserRoleResource()),
];
}
 
//...
}
namespace App\Providers;
 
use App\MoonShine\Resources\ArticleResource;
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Menu\MenuDivider;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('Администраторы', new MoonShineUserResource()),
MenuDivider::make(),
MenuItem::make('Роли', new MoonShineUserRoleResource()),
];
}
 
//...
}

menu_divider menu_divider_dark

Вы можете использовать текст в качестве разделителя; для этого нужно передать его в метод make().

namespace App\Providers;
 
use App\MoonShine\Resources\ArticleResource;
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Menu\MenuDivider;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('Администраторы', new MoonShineUserResource()),
MenuDivider::make('Разделитель'),
MenuItem::make('Роли', new MoonShineUserRoleResource()),
];
}
 
//...
}
namespace App\Providers;
 
use App\MoonShine\Resources\ArticleResource;
use App\MoonShine\Resources\CategoryResource;
use MoonShine\Menu\MenuDivider;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('Администраторы', new MoonShineUserResource()),
MenuDivider::make('Разделитель'),
MenuItem::make('Роли', new MoonShineUserRoleResource()),
];
}
 
//...
}

menu_divider_label menu_divider_label_dark

Условие отображения

Вы можете отображать пункты меню на основе условий с помощью метода canSee().

canSee(Closure $callback)
canSee(Closure $callback)
namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
use MoonShine\Resources\MoonShineUserRoleResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make('Система', [
MenuItem::make('Администраторы', new MoonShineUserResource()),
MenuItem::make('Роли', new MoonShineUserRoleResource())
->canSee(fn()=> false)
])
->canSee(function(Request $request) {
return $request->user('moonshine')?->id === 1;
})
];
}
 
//...
}
namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
use MoonShine\Resources\MoonShineUserRoleResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make('Система', [
MenuItem::make('Администраторы', new MoonShineUserResource()),
MenuItem::make('Роли', new MoonShineUserRoleResource())
->canSee(fn()=> false)
])
->canSee(function(Request $request) {
return $request->user('moonshine')?->id === 1;
})
];
}
 
//...
}

Иконка

Вы можете установить иконку для пункта меню и группы. Это можно сделать несколькими способами.

Через параметр

Иконку можно установить, передав название в качестве третьего параметра в статическом методе make().

namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
use MoonShine\Resources\MoonShineUserRoleResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make('Система', [
MenuItem::make('Администраторы', new MoonShineUserResource(), 'heroicons.outline.users'),
MenuItem::make('Роли', new MoonShineUserRoleResource(), 'heroicons.hashtag'),
])
];
}
 
//...
}
namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
use MoonShine\Resources\MoonShineUserRoleResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make('Система', [
MenuItem::make('Администраторы', new MoonShineUserResource(), 'heroicons.outline.users'),
MenuItem::make('Роли', new MoonShineUserRoleResource(), 'heroicons.hashtag'),
])
];
}
 
//...
}

Через метод

Используйте метод icon().

icon(string $icon)
icon(string $icon)
namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
use MoonShine\Resources\MoonShineUserRoleResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make('Система', [
MenuItem::make('Администраторы', new MoonShineUserResource())
->icon('heroicons.outline.users'),
MenuItem::make('Роли', new MoonShineUserRoleResource())
->icon('heroicons.hashtag'),
])
->icon('heroicons.cog')
];
}
 
//...
}
namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
use MoonShine\Resources\MoonShineUserResource;
use MoonShine\Resources\MoonShineUserRoleResource;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make('Система', [
MenuItem::make('Администраторы', new MoonShineUserResource())
->icon('heroicons.outline.users'),
MenuItem::make('Роли', new MoonShineUserRoleResource())
->icon('heroicons.hashtag'),
])
->icon('heroicons.cog')
];
}
 
//...
}

Через атрибут

Пункт меню отобразит иконку, если у класса ModelResource, Page или Resource указан атрибут Icon, и иконка не переопределена другими способами.

namespace MoonShine\Resources;
 
#[Icon('heroicons.outline.users')]
class MoonShineUserResource extends ModelResource
{
 
//...
 
}
namespace MoonShine\Resources;
 
#[Icon('heroicons.outline.users')]
class MoonShineUserResource extends ModelResource
{
 
//...
 
}

Для более подробной информации обратитесь к разделу Иконки.

Метка

Также возможно добавить метку к пункту меню.

Через пункт меню

Чтобы добавить метку к пункту меню, используйте метод badge(), который принимает замыкание в качестве параметра.

badge(Closure $callback)
badge(Closure $callback)
namespace App\Providers;
 
use App\Models\Comment;
use App\MoonShine\Resources\CommentResource;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('Комментарии', new CommentResource())
->badge(fn() => Comment::count())
];
}
 
//...
}
namespace App\Providers;
 
use App\Models\Comment;
use App\MoonShine\Resources\CommentResource;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('Комментарии', new CommentResource())
->badge(fn() => Comment::count())
];
}
 
//...
}

Через метод класса

Для ModelResource, Page или Resource есть альтернативный способ установки метки - метод getBadge().

namespace App\MoonShine\Resources;
 
use App\Models\Post;
use MoonShine\Resources\ModelResource;
 
class PostResource extends ModelResource
{
//...
 
public function getBadge(): string
{
return 'новый';
}
 
//...
}
namespace App\MoonShine\Resources;
 
use App\Models\Post;
use MoonShine\Resources\ModelResource;
 
class PostResource extends ModelResource
{
//...
 
public function getBadge(): string
{
return 'новый';
}
 
//...
}

menu_badge menu_badge_dark

Перевод

Для перевода пунктов меню нужно передать ключ перевода в качестве имени и добавить метод translatable()

translatable(string $key = '')
translatable(string $key = '')
namespace App\Providers;
 
use App\Models\Comment;
use App\MoonShine\Resources\CommentResource;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('menu.Comments', new CommentResource())
->translatable()
// или
MenuItem::make('Comments', new CommentResource())
->translatable('menu')
];
}
 
//...
}
namespace App\Providers;
 
use App\Models\Comment;
use App\MoonShine\Resources\CommentResource;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('menu.Comments', new CommentResource())
->translatable()
// или
MenuItem::make('Comments', new CommentResource())
->translatable('menu')
];
}
 
//...
}
// lang/ru/menu.php
 
return [
'Comments' => 'Комментарии',
];
// lang/ru/menu.php
 
return [
'Comments' => 'Комментарии',
];

Вы можете использовать инструменты перевода Laravel для перевода меток меню.

namespace App\Providers;
 
use App\Models\Comment;
use App\MoonShine\Resources\CommentResource;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('Комментарии', new CommentResource())
->badge(fn() => __('menu.badge.new'))
];
}
 
//...
}
namespace App\Providers;
 
use App\Models\Comment;
use App\MoonShine\Resources\CommentResource;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('Комментарии', new CommentResource())
->badge(fn() => __('menu.badge.new'))
];
}
 
//...
}

Открытие в новой вкладке

Пункт меню может иметь флаг, указывающий, должна ли ссылка открываться в новой вкладке или нет. Это можно реализовать несколькими способами.

Через параметр

Флаг можно установить, передав true/false или замыкание в статический метод make().

namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make('Система', [
MenuItem::make('Документация MoonShine', 'https://moonshine-laravel.com/docs', 'heroicons.arrow-up', true),
MenuItem::make('Документация Laravel', 'https://laravel.com/docs', 'heroicons.arrow-up', fn() => true),
])
];
}
 
//...
}
namespace App\Providers;
 
use MoonShine\Menu\MenuGroup;
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make('Система', [
MenuItem::make('Документация MoonShine', 'https://moonshine-laravel.com/docs', 'heroicons.arrow-up', true),
MenuItem::make('Документация Laravel', 'https://laravel.com/docs', 'heroicons.arrow-up', fn() => true),
])
];
}
 
//...
}

Через метод

Используйте метод blank().

blank(Closure|bool $blankCondition = true)
blank(Closure|bool $blankCondition = true)
namespace App\Providers;
 
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('Документация MoonShine', 'https://moonshine-laravel.com/docs')
->blank(),
MenuItem::make('Документация Laravel', 'https://laravel.com/docs')
->blank(fn() => true),
];
}
 
//...
}
namespace App\Providers;
 
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('Документация MoonShine', 'https://moonshine-laravel.com/docs')
->blank(),
MenuItem::make('Документация Laravel', 'https://laravel.com/docs')
->blank(fn() => true),
];
}
 
//...
}

Активный элемент

Пункт меню становится активным, если он соответствует url, но метод forceActive() позволяет принудительно сделать элемент активным.

forceActive(Closure|bool $forceActive)
forceActive(Closure|bool $forceActive)
namespace App\Providers;
 
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('Метка', '/endpoint')
->forceActive(fn() => request()->fullUrlIs('*admin/endpoint/*')),
];
}
 
//...
}
namespace App\Providers;
 
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuItem::make('Метка', '/endpoint')
->forceActive(fn() => request()->fullUrlIs('*admin/endpoint/*')),
];
}
 
//...
}

Пользовательское представление

Когда вам нужно изменить представление, используя fluent интерфейс, вы можете использовать метод customView().

customView(string $path)
customView(string $path)
namespace App\Providers;
 
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make('Группа', [
MenuItem::make('Метка', '/endpoint')
->customView('admin.custom-menu-item'),
])
->customView('admin.custom-menu-group'),
];
}
 
//...
}
namespace App\Providers;
 
use MoonShine\Menu\MenuItem;
use MoonShine\Providers\MoonShineApplicationServiceProvider;
 
class MoonShineServiceProvider extends MoonShineApplicationServiceProvider
{
protected function menu(): array
{
return [
MenuGroup::make('Группа', [
MenuItem::make('Метка', '/endpoint')
->customView('admin.custom-menu-item'),
])
->customView('admin.custom-menu-group'),
];
}
 
//...
}