duscarvalho / filament-navigation
在 Filament 中构建结构化导航菜单。
Requires
- php: ^8.1
- doctrine/dbal: ^3.5.1
- filament/filament: ^3.0
- illuminate/contracts: ^10.0
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- nunomaduro/collision: ^7.0
- nunomaduro/larastan: ^2.0.1
- orchestra/canvas: ^8.0
- orchestra/testbench: ^8.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
This package is not auto-updated.
Last update: 2024-10-01 22:40:03 UTC
README
此 Filament 插件提供了一个 Navigation
资源,允许您使用干净的拖放 UI 构建结构化导航菜单。
安装
首先通过 Composer 安装此包
composer require ryangjchandler/filament-navigation
运行迁移。
php artisan migrate
发布包的资产
php artisan filament:assets
使用方法
首先需要将插件与 Filament 进行注册。这可以在您的 PanelProvider
中完成,例如 AdminPanelProvider
。
use duscarvalho\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>
检索导航对象
要检索导航对象,请将 handle 提供给 duscarvalho\FilamentNavigation\Models\Navigation::fromHandle()
方法。
use duscarvalho\FilamentNavigation\Models\Navigation; $menu = Navigation::fromHandle('main-menu');
自定义项目类型
默认情况下,此插件包含一个名为“外部链接”的单个“项目类型”。此项目类型期望提供一个 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 duscarvalho\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
更新日志
请参阅 CHANGELOG 了解最近更改的详细信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全漏洞
请审查 我们的安全策略 了解如何报告安全漏洞。
鸣谢
许可协议
麻省理工学院许可协议(MIT)。请参阅许可文件获取更多信息。