使用KnpMenuBundle

编辑本页

使用KnpMenuBundle

欢迎来到KnpMenuBundle -创建菜单是有趣的!

安装

步骤3:(可选)配置bundle

该bundle带有一个合理的默认配置,如下所示。您可以定义这些选项,如果您需要更改它们:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9
#配置/包/ knp_menu.yamlknp_menu:#使用"twig: false"禁用twig扩展和TwigRenderer枝:模板:KnpMenuBundle: menu.html.twig#如果为真,启用PHP模板的帮助器模板:#要使用的渲染器,list默认也是可用的default_renderer:嫩枝

请注意

如果您禁用了Twig支持,请注意更改默认渲染器。

创建您的第一个菜单!

有两种方法可以创建菜单:“简单”的方法和更灵活的将菜单创建为服务的方法。

方法a)简单的方法(耶)!

类中创建一个新类,以创建菜单菜单其中一个包的目录。这门课叫做构建器在我们的例子中-将为您需要构建的每个菜单提供一个方法。

一个示例构建器类看起来像这样:

12 34 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
/ / src /菜单/ Builder.php名称空间应用程序菜单使用应用程序实体博客使用Knp菜单FactoryInterface使用Knp菜单ItemInterface使用ob娱乐下载组件DependencyInjectionContainerAwareInterface使用ob娱乐下载组件DependencyInjectionContainerAwareTrait最后构建器实现了ContainerAwareInterface使用ContainerAwareTrait公共函数mainMenu(FactoryInterface工厂数组,选项ItemInterface菜单工厂->createItem (“根”);菜单->addChild (“回家”, (“路线”= >“主页”]);//从容器访问服务!新兴市场->容器->get (“原则”->getManager ();// findMostRecent和Blog只是假想的例子博客新兴市场->getRepository(博客::类)->findMostRecent ();菜单->addChild (“最新博客”, (“路线”= >“blog_show”“routeParameters”= > [“id”= >博客->getId ()]]);//创建另一个菜单项菜单->addChild (“关于我”, (“路线”= >“大约”]);//您也可以添加子级别到您的菜单如下菜单“关于我”->addChild (“编辑资料”, (“路线”= >“edit_profile”]);/ /……添加更多子代返回菜单;}}

用标准knp_menu.html.twig如果你的当前页面是'Home',你的菜单将呈现如下标记:

12 3 4 5 6 7 8 9 10 11 12 13
<ul><“当前第一”><一个href“# route_to /主页”>首页一个>><“current_ancestor”><一个href“# route_to page_show / ?id = 42”>关于我的一个><ul“menu_level_1”><“当前,第一,最后”><一个href“# route_to / edit_profile”>编辑配置文件一个>>ul>>ul>

请注意

您只需要实现ContainerAwareInterface如果您需要服务容器。处理依赖项的更优雅的方法是将它们注入构造函数中。如果您想这样做,请参阅下面的方法。

请注意

可以使用包继承重写菜单构建器。

要真正渲染菜单,只需在任何模板的任何位置执行以下操作:

  • 嫩枝
  • PHP
1
{{knp_menu_render('App:Builder:mainMenu')}}

使用此方法,您可以使用由三部分组成的字符串引用菜单:方法

如果需要创建第二个菜单,只需将另一个方法添加到构建器类(如。sidebarMenu),生成并返回新菜单,然后通过应用:建筑:sidebarMenu

就是这样!菜单是<新兴市场>非常可配置的。有关详细信息,请参见<一个href="https://github.com/KnpLabs/KnpMenu/blob/master/doc/01-Basic-Menus.md" class="reference external" rel="external noopener noreferrer" target="_blank">KnpMenu文欧宝官网下载app档

显示菜单

设置好菜单后,呈现菜单就很容易了。如果你用的是“简单”的方法,那么就按照下面的方法去做:

  • 嫩枝
  • PHP
1
{{knp_menu_render('App:Builder:mainMenu')}}

此外,你可以将一些选项传递给渲染器:

  • 嫩枝
  • PHP
1
{{knp_menu_render('App:Builder:mainMenu', {'depth': 2, 'currentAsLink': false})}}

的“其他呈现选项”标头,以获得完整的选项列表<一个href="https://github.com/KnpLabs/KnpMenu/blob/master/doc/01-Basic-Menus.md" class="reference external" rel="external noopener noreferrer" target="_blank">KnpMenu文欧宝官网下载app档

你也可以“获得”一个菜单,你可以用它来稍后渲染:

  • 嫩枝
  • PHP
1 2
{%menuItem = knp_menu_get('App:Builder:mainMenu') %}{{knp_menu_render(menuItem)}}

如果您只想检索菜单的某个分支,您可以执行以下操作,其中“Contact”是根菜单项之一,并且在它下面有子菜单项。

  • 嫩枝
  • PHP
1 2
{%menuItem = knp_menu_get('App:Builder:mainMenu', ['Contact']) %}{{knp_menu_render(['App:Builder:mainMenu', 'Contact'])}}

类的第三个参数可以将一些选项传递给构造器knp_menu_get功能:

  • 嫩枝
  • PHP
1 2
{%menuItem = knp_menu_get('App:Builder:mainMenu', [], {'some_option': 'my_value'}) %}{{knp_menu_render(menuItem)}}
此工作,包括代码示例,是根据<一个rel="license" href="https://creativecommons.org/licenses/by-sa/3.0/">创作共用BY-SA 3.0许可证。