enimiste / knp-menu-laravel
Laravel 包,用于创建导航菜单,基于 KnpLabs/KnpMenu。dowilcox/KnpMenu-Laravel 包的分支
2.2.2
2016-11-22 10:25 UTC
Requires
- illuminate/routing: ^5.2
- illuminate/support: ~5.0 || ~5.1 || ~5.2 || ~5.3
- knplabs/knp-menu: ~2.0
Requires (Dev)
- phpunit/phpunit: ~4.5
README
Laravel 5 包,用于创建导航菜单,基于 KnpLabs/KnpMenu。
安装
添加到您的 composer.json 文件中
"enimiste/knp-menu-laravel": "2.*"
注册包
在 config/app.php 中添加服务提供者和别名。
Dowilcox\KnpMenu\MenuServiceProvider::class,
'Menu' => Dowilcox\KnpMenu\Facades\Menu::class,
直接访问菜单服务
$menu_builder = app('knp_menu.menu');
发布配置
php artisan vendor:publish --tag=knp_menu
自定义渲染器
要定义自定义渲染器
- 实现接口 "Knp\Menu\Renderer\RendererInterface"
- 注册一个绑定到 "knp_menu.renderer",返回您新自定义渲染器的新实例。要获取匹配器,请使用
$app["knp_menu.matcher"]
自定义投票者
要添加自定义投票者,实现接口 "Dowilcox\KnpMenu\Voter\OrderedVoterInterface",并在服务容器中注册它带有 "knp_menu.voter" 标签
设置应首先执行的投票者的低优先级。
建议的顺序值在 0 到 100 之间。
您的投票者将先于内置投票者执行。
- RouteNameVoter (100)
- UriVoter (200 和 300)
Blade 指令
- @rendermenu("main" [, {"firstClass":"first2","lastClass":"last2"}]) 或 @rendermenu("main" [, "config_name"]): 渲染名为 "menu_name" 的菜单。它是
echo \Menu::render(\Menu::get('menu_name'))
的快捷方式 - @menu('menu_name') ... @endmenu : 在这两个指令之间,您可以使用名为
$menu
的变量访问名为 "menu_name" 的菜单。此对象是Knp\Menu\MenuItem
的实例
示例
$menu = Menu::create('main-menu', ['childrenAttributes' => ['class' => 'nav']]); /* * This is the list of possible options for a menu item : * * 'uri' => null, * 'label' => null, * 'attributes' => array(), * 'linkAttributes' => array(), * 'childrenAttributes' => array(), * 'labelAttributes' => array(), * 'extras' => array(), * 'current' => null, * 'display' => true, * 'displayChildren' => true, */ $menu->addChild('Home', [ 'uri' => url('/'), 'attributes' => [ 'class'=>'your_css_class', ], 'extras' => [ 'routes' => [ ['route' => 'route_name_1'], ['route' => 'route_name_2'], ] ] ]); $menu->addChild('Users', ['uri' => route('admin.users.index')]); $menu->addChild('Roles', ['uri' => route('admin.roles.index')]); $menu->addChild('Menu', ['uri' => url('menu')]); echo Menu::render($menu); //Or echo Menu::render($menu, $custom_render_options);//$custom_render_options is an array
将输出
<ul class="nav"> <li class="first"> <a href="https://:8000">Home</a> </li> <li class='your_css_class'> <a href="https://:8000/admin/users">Users</a> </li> <li class='your_css_class'> <a href="https://:8000/admin/roles">Roles</a> </li> <li class="current active last your_css_class"> <a href="https://:8000/menu">Menu</a> </li> </ul>