blimundo / laravel-menu
Laravel 应用程序的菜单管理
2.0.0
2022-03-09 06:33 UTC
Requires
Requires (Dev)
- nunomaduro/collision: ^6.1
- orchestra/testbench: ^7.1
README
在 Laravel 中实现简单且无痛苦的菜单管理。此包不提供任何 UI,仅关注存储和显示菜单的功能。
由于使用了 spatie/laravel-translatable 包,项目可以支持不同语言的显示。
要求
此包需要 Laravel 8 或更高版本,PHP 8 或更高版本,以及支持 json 字段和 MySQL 兼容函数的数据库。
安装
您可以通过 composer 安装此包
composer require blimundo/laravel-menu
包将自动注册自身。
安装后,您可以通过运行迁移来创建菜单表
php artisan migrate
将 MenuGenerator 别名提供给应用程序。
示例
use Blimundo\Menu\Builder; Builder::add('Home')->order(1)->icon('mdi mdi-home')->url('HomeController@show')->create(); Builder::add(['en' => 'Settings', 'pt' => 'Configurações']) ->order(9) ->icon('mdi mdi-cog') ->items(function () { Builder::add(['en' => 'Roles', 'pt' => 'Funções']) ->order(1) ->icon('mdi mdi-account-group') ->url('role.index') ->gates('can_view_roles') ->create(); Builder::add(['en' => 'Users', 'pt' => 'Utilizadores']) ->order(2) ->icon('mdi mdi-account') ->url('user.index') ->gates('can_view_users') ->create(); }); dd(MenuGenerator::generate()); /* Result: array:2 [ "Home" => array:5 [ "icon" => "mdi mdi-home" "label" => "Home" "link" => "localhost:8000/home" "level" => 1 "has_items" => false ] "Settings" => array:6 [ "icon" => "mdi mdi-cog" "label" => "Settings" "link" => "#" "level" => 1 "has_items" => true "items" => array:2 [ "Roles" => array:5 [ "icon" => "mdi mdi-account-group" "label" => "Roles" "link" => "localhost:8000/role" "level" => 2 "has_items" => false ] "Users" => array:5 [ "icon" => "mdi mdi-account" "label" => "Users" "link" => "localhost:8000/user" "level" => 2 "has_items" => false ] ] ] */
将菜单持久化到数据库中
要创建并持久化菜单到数据库中,您可以使用 Builder 类。在下面的示例中,创建了两个菜单条目
use Blimundo\Menu\Builder; Builder::add('Home')->create(); Builder::add('Help')->create();
翻译
要定义多种语言,只需将数组传递给 add() 方法,其中键是语言代码。包内部使用 spatie/laravel-translatable 来管理翻译。
Builder::add(['en' => 'Help', 'pt' => 'Ajuda'])->create();
URL
您有 3 种方式来生成 URL
- 路由 URL(调用 Laravel route() 辅助函数 - 如果路由不存在,则运行时将引发异常)
- 动作 URL(调用 Laravel action() 辅助函数 - 如果控制器或方法不存在,则运行时将引发异常)
- 静态 URL
Builder::add('Google')->url('https://google.com')->create(); Builder::add('Add User')->route('users.create')->create(); Builder::add('Import User')->action('\App\Http\Controllers\UserController@import')->create();
图标
要将图标关联到菜单,只需调用 icon() 函数。
Builder::add('Help')->icon('mdi mdi-help')->create();
顺序
要设置项目顺序,只需调用 order() 函数。
Builder::add('Help')->order(2)->create();
具有相同顺序(或未定义顺序)的项目将根据当前语言按字母顺序排序。
权限
有时我们希望菜单仅在用户具有某些权限时显示。此包使这变得非常简单。只需使用权限名称调用 gates() 函数。当生成菜单时,包将测试权限,如果通过则包括菜单。
Builder::add('Add User')->gates('can_add_user')->create();
如果您需要测试多个权限,请传递一个列表。只有当所有权限都返回 true 时,菜单才会显示。
Builder::add('Add User')->gates('can_add_user', 'can_import_user')->create();
子菜单
要创建子菜单,请调用 items() 函数,并传递一个回调。回调内部创建的所有菜单都将与该菜单相关联。
Builder::add('Settings')->items(function () { Builder::add('Roles')->create(); Builder::add('Users')->create(); });
许可协议
Laravel 菜单是开源软件,采用 MIT 许可协议。