kineticamobile / atrochar
Laravel 应用菜单生成器 - 使用数据库支持的菜单和 @menu Blade 组件在你的视图中填充菜单
Requires
- illuminate/support: ~7|~8
Requires (Dev)
- orchestra/testbench: ~5|~6
- phpunit/phpunit: ~9.0
README
Laravel 应用菜单生成器 - 使用数据库支持的菜单和 @menu Blade 组件在你的视图中填充菜单
安装
- 通过 Composer
$ composer require kineticamobile/atrochar
- 将特性添加到您的 用户 模型中。
use Kineticamobile\Atrochar\Traits\MenuAbilities; class User extends Authenticatable { use MenuAbilities;
- 运行迁移
$ php artisan migrate
简单用法
创建菜单及其项目
您可以在应用程序中访问菜单管理 "APP_URL/atrochar/menus"
或在您想要的位置添加链接
<a href="{{ route('atrochar.menus.index') }}"> {{ __('Menus') }} </a>
使用 blade 组件在您的视图中添加已创建的菜单
- 使用菜单名称
@menu("Dasboard")
- 使用菜单 ID
@menu(1)
- 使用菜单对象
$menu = Menu::find(1); [...] @menu($menu)
使用视图代替程序化方法
您可以将组件的视图发布出来
$ php artisan vendor:publish --tag=atrochar.views
在 resources/views/vendors/atrochar
中您有两个视图,default.blade.php
和 jetstream.blade.php
以下是一些使用示例
-
@menuview($menu)
使用default
-
@menuview($menu, 'jetstream')
使用jetstream
高级用法
更改包路由的前缀
发布配置
$ php artisan vendor:publish --tag=atrochar.config
修改 conf/atrochar.php
中的字段 prefix
。它允许空字符串,如果为 null,则使用 atrochar
。
更改 iframe 路由
通常 iframe 链接位于路由 atrochar/i/24
您可以在发布配置文件后,在 conf/atrochar.php
中的字段 iframe
中更改 i
为您想要的任何值
$ php artisan vendor:publish --tag=atrochar.config
限制对菜单管理的访问
默认情况下,所有用户都可以 管理 菜单。
您需要将方法 canManageMenus()
添加到您的用户模型中
/** * @return bool */ public function canManageMenus() { // For example return $this->hasRole('Admin'); }
链接权限字段的用法
默认情况下,所有项目都可以 查看。但您可以在链接中添加权限,如果不为空,则此功能会与用户方法 canViewMenuItem($ability)
进行检查
您需要将方法 canViewMenuItem($ability)
添加到您的用户模型中以扩展此行为
/** * @return bool */ public function canViewMenuItem($ability) { // For example return $this->getAllPermissions()->pluck('name')->contains($ability); }
使用主题或重写默认值来设计您的菜单样式
使用主题。在您的应用程序中发布配置文件。在 config/atrochar.php 中,您可以修改默认值或添加新主题
$ php artisan vendor:publish --tag=atrochar.config
return [ "defaultTheme" => [ "linkTag" => "a", "class" => "", "activeClass" => "", "listStartTag" => "<ul>", "listEndTag" => "</ul>", "itemStartTag" => "<li>", "itemEndTag" => "</li>", ], "themes" => [ "jetstream" => [ "linkTag" => "a", "class" => "inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 hover:text-gray-700 hover:border-gray-300 focus:outline-none focus:text-gray-700 focus:border-gray-300 transition duration-150 ease-in-out", "activeClass" => "inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 text-sm font-medium leading-5 text-gray-900 focus:outline-none focus:border-indigo-700 transition duration-150 ease-in-out", "listStartTag" => "", "listEndTag" => "", "itemStartTag" => "", "itemEndTag" => "", ] ] ];
一旦您创建了一个主题,您可以在 @menu 组件的第二个参数中传递一个字符串,即主题的名称
@menu("Dasboard", "jetstream")
如果您传递一个数组作为第二个参数,则这些值将覆盖默认Theme的值
@menu($menu, ["class" => "bg-gray-500 font-mono"])
安全
如果您发现任何与安全相关的问题,请通过电子邮件而不是使用问题跟踪器发送给作者。
致谢
许可
MIT