enimiste/knp-menu-laravel

Laravel 包,用于创建导航菜单,基于 KnpLabs/KnpMenu。dowilcox/KnpMenu-Laravel 包的分支

2.2.2 2016-11-22 10:25 UTC

This package is auto-updated.

Last update: 2024-08-29 04:31:11 UTC


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>