带有 KnpMenu 的 Symfony 2 面包屑

Posted

技术标签:

【中文标题】带有 KnpMenu 的 Symfony 2 面包屑【英文标题】:Symfony 2 breadcrumbs with KnpMenu 【发布时间】:2013-06-27 15:50:04 【问题描述】:

我使用稳定版本的 KnpMenuKnpMenuBundle - v.1.2.0 由于某些依赖关系,我无法使用 v.2。

我正在尝试构建面包屑,具体取决于我的菜单。

让我们从菜单开始。我有我的 MenuBuilder 类:

$menu = $this->factory->createItem('main');
$menu->setLabel('Main');
$menu->addChild('home', array('route' => 'home','label'=>'Home'));
$menu['home']->addChild('level1',array('route' => 'level1', 'label' => 'Level1'));
$menu['home']['level1']->addChild('level2',array('route' => 'level2', 'label' => 'Level2'));

Knp\Menu\MenuItem 类有一个 getBreadcrumbsArray() 方法。它应该返回当前活动菜单路径中的项目数组。如果您使用的是早期版本的 KnpMenu (,则返回的数组将采用 label => uri 的形式。

我想,当我加载 level2 时,我的面包屑路径应该类似于:

首页 -> Level1 -> Level2

因为 Leve1 是 Level2 的父级,而 Home 也是它的祖先。

取而代之的是,我的 Twig 模板中的 getBreadcrumbsArray() 方法调用会生成以下数据:

array(2) 
  ["Main"]=>
  NULL
  ["Home"]=>
  string(25) "/symfony/web/app_dev.php/"

没有Level1,没有Level2,只有Home。怎么了?它应该这样工作吗?我做错了什么?

【问题讨论】:

getCurrentUri 返回什么? 【参考方案1】:

对于Knp v1,应该尝试生成children:

$menu = $this->factory->createItem('root');
$menu->addChild['Main']
     ->seLabel['home']
$menu['Main']->addchild('level1', array('route', '@route1'))
$menu['Main']['level1']->addChild('level2', array('route', '@route2'))
% knp_menu_get('Builder:BreadCrumb').getBreadcrumbsArray() %

【讨论】:

以上是关于带有 KnpMenu 的 Symfony 2 面包屑的主要内容,如果未能解决你的问题,请参考以下文章

knpMenuBundle制作面包屑导航 左侧导航 碉堡了

Laravel 带有链接的动态面包屑

带有两个提交按钮的 Symfony 2 表单

面包屑上的奏鸣曲管理标签

带有 2 个参数的 symfony 重定向

iOS:带有面包屑路径的自定义导航栏?