平台面板菜单是图形用户界面的重要元素,因为它是项目的主要导航工具。

用法

默认菜单注册发生在 app/Orchid/PlatformProvider.php 中:

namespace App\Orchid;

use Orchid\Screen\Actions\Menu;
use Orchid\Platform\OrchidServiceProvider;

class PlatformProvider extends OrchidServiceProvider
{
    // ...
    
    public function menu(): array
    {
        return [
            Menu::make('示例')->url('https://orchid.software/'),
        ];
    }
}

注意: 在创建每个元素时,会自动生成一个唯一键,该键不应重复。不过,您可以使用 slug 方法手动更改键。

链接

使用 Menu 类通过 URL 或路由创建链接。要使用 URL 创建链接,请使用 url 方法:

use Orchid\Screen\Actions\Menu;

Menu::make('示例')->url('https://orchid.software/');

要使用路由创建链接,请使用 route 方法并提供路由名称:

Menu::make('示例')->route('route.idea');

确保路由在应用程序的路由文件中定义。

活动状态

要确定链接活动状态,已经使用 dwightwatson/active 包, 当使用 routeurl 时会自动设置,但可以通过显式指令进行更改:

Menu::make('示例')
    ->route('route.idea')
    ->active('route.idea*');
    
Menu::make('示例')
    ->route('route.idea')
    ->active([
        'route.idea',
        'route.other'
    ]);
    
Menu::make('示例')
    ->url('/pages/contact')
    ->active('not:pages/contact');

基于权限

当某些链接应根据权限的可用性或其他情况缺失时,这是一个相当预期的情况,为此:

Menu::make('示例')->permission('platform.idea');

或任何其他返回布尔值的检查:

Menu::make('示例')->canSee(true);

外观

对于菜单项,您可以指定一个图形图标:

Menu::make('示例')->icon('bs.heart');

也可以通过设置第一个元素的标题将其集成到视觉组中:

Menu::make('示例')->title('Analytics');

徽章通知

菜单项可以通过数字值通知用户任何事件,为此:

Menu::make('Comments')
    ->icon('bubbles')
    ->route('platform.comments')
    ->badge(fn () => 10);

排序项目

通过设置序列号进行排序:

Menu::make('Second')->sort(5);
Menu::make('First')->sort(4);

创建嵌套菜单

您可以指定单级子菜单,如下所示:

Menu::make('Multi Level')
    ->icon('code')
    ->list([
        Menu::make('Second Level Item 1')->icon('bs.bag')->sort(2),
        Menu::make('Second Level Item 2')->icon('bs.heart')->sort(0),
    ]),

要创建动态子菜单,您需要添加主项目并使用 slug 方法指定其唯一名称。然后,您可以向新项目添加其他元素。

Menu::make('Multi Level')
    ->slug('sub-menu')
    ->icon('code')
    ->list([
        Menu::make('Second Level Item 1')->icon('bs.bag'),
        Menu::make('Second Level Item 2')->icon('bs.heart'),
    ]),

然后在我们自己的包中添加新项目,如:

use Orchid\Support\Facades\Dashboard;

Dashboard::addMenuSubElements('sub-menu', [
    Menu::make('Second Level Item 2')->icon('badge')
]);

注意: 图形界面支持菜单嵌套到第二级。有关创建有效且直观导航的更多详细信息,请查看我们的设计指南

我们的朋友