ibecsystems / admin-kit-navigation
AdminKit 的导航菜单包
Requires
- php: ^8.1
- doctrine/dbal: ^3.5.1
- filament/filament: ^3.0-stable
- ibecsystems/admin-kit-core: ^3.1
- illuminate/contracts: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- nunomaduro/collision: ^7.0|^8.0
- nunomaduro/larastan: ^2.0.1
- orchestra/canvas: ^8.0
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5|^10.0
- spatie/laravel-ray: ^1.26
README
此 Filament 插件提供了一个 Navigation
资源,允许您使用干净的拖放 UI 构建结构化导航菜单。
安装
首先通过 Composer 安装此包
composer require ibecsystems/admin-kit-navigation
运行迁移。
php artisan migrate
发布包的资产
php artisan filament:assets
使用方法
您首先需要在 Filament 中注册此插件。这可以在您的 PanelProvider
中完成,例如 AdminPanelProvider
。
use RyanChandler\FilamentNavigation\FilamentNavigation; return $panel ->plugin(FilamentNavigation::make());
如果您想自定义导航组、排序或图标,可以使用 NavigationResource::navigationGroup()
、NavigationResource::navigationSort()
和 NavigationResource::navigationIcon()
方法。
数据结构
每个导航菜单都必须有一个 name
和 handle
。handle
应该是唯一的,并用于检索菜单。
项目存储在名为 items
的 JSON 列表中。这是一个类似于以下结构的递归数据结构:
[ { "label": "Home", "type": "external-link", "data": { "url": "/", "target": "_blank", }, "children": [ // ... ], } ]
递归结构使得渲染嵌套菜单/下拉菜单变得非常简单
<ul> @foreach($menu->items as $item) <li> {{ $item['label'] }} @if($item['children']) <ul> {{-- Render the item's children here... --}} </ul> @endif </li> @endforeach </ul>
检索导航对象
要检索导航对象,请将句柄提供给 RyanChandler\FilamentNavigation\Models\Navigation::fromHandle()
方法。
use RyanChandler\FilamentNavigation\Models\Navigation; $menu = Navigation::fromHandle('main-menu');
自定义项目类型
默认情况下,此插件包含一个名为 "External link" 的单个 "项目类型"。此项目类型期望提供一个 URL 和可选的 "目标"(同一选项卡或新选项卡)。
可以通过自定义项目类型扩展此插件。自定义项目类型有一个名称和一个 Filament 字段对象数组(或一个产生数组的 Closure
),这些对象将显示在 "项目" 模态中。
此 API 允许您将导航菜单与您应用程序的实体和模型进行深度集成。
return $panel ->plugin( FilamentNavigation::make() ->itemType('post', [ Select::make('post_id') ->//... ]) );
所有自定义字段都可以在项目的 data
属性中找到。
全局自定义字段
可能存在您希望所有项目类型都有一组额外字段的情况。这对于类、自定义 ID 等非常有用。
要注册全局自定义字段,请使用插件对象的 withExtraFields()
方法。
return $panel ->plugin( FilamentNavigation::make() ->withExtraFields([ TextInput::make('classes'), ]), );
Navigation
字段类型
此插件还提供了一个自定义 Filament 字段,可用于在其他表单和资源中搜索和选择导航菜单。
use RyanChandler\FilamentNavigation\Filament\Fields\NavigationSelect; ->schema([ NavigationSelect::make('navigation_id'), ])
默认情况下,此字段不可搜索,每个选项的值将是菜单的 id
。
要使字段可搜索,请调用 ->searchable()
方法。
->schema([ NavigationSelect::make('navigation_id') ->searchable(), ])
如果您想更改每个选项的值,请调用 ->optionValue()
方法。
->schema([ NavigationSelect::make('navigation_id') ->optionValue('handle'), ])
测试
composer test
变更日志
有关最近更改的更多信息,请参阅 变更日志。
贡献
有关详细信息,请参阅 贡献指南。
安全漏洞
有关报告安全漏洞的详细信息,请参阅 我们的安全策略。
致谢
许可协议
麻省理工学院许可证(MIT)。请参阅许可证文件获取更多信息。