【发布时间】:2014-07-01 12:41:17
【问题描述】:
我正在努力使用 Symfony2 和 Knpmenu 来构建一个菜单来处理:
- 面包屑
- 使用动态参数路由
- 从不同的孩子开始呈现单独的菜单
我的Menu/Builder.php 文件看起来像这样(navbar、pull-nav 等额外位是 mopa_bootstrap 扩展的一部分,它使用引导类处理渲染):
namespace My\AppBundle\Menu;
use Knp\Menu\FactoryInterface;
class Builder
{
public function mainMenu(FactoryInterface $factory, array $options)
{
$menu = $factory->createItem(
'root', array(
'navbar' => true,
'pull-right' => true,
)
);
// Main Menu -> Config
// no link here, it's just a placeholder
$dropdown = $menu->addChild(
'Config', array(
'dropdown' => true,
'caret' => true,
)
);
// Menu -> Config -> User
$dropdown2 = $dropdown ->addChild(
'User', array(
'route' => 'user',
)
);
// Secondary Menu -> Edit (but child of Menu -> Config -> User)
$dropdown2->addChild(
'Edit',
array(
'route' => 'user_edit',
'routeParameters' => array('name' => $options['id']),
)
);
我们的想法是有一个仅打印前两个级别的主菜单,以及一个在其他地方呈现的单独菜单,以允许用户在正在查看的特定元素的编辑/删除/任何视图之间移动。
我想要实现的是拥有一个单一的结构,从而处理育儿结构,不仅让标志父母在菜单中处于活动状态,而且能够处理有效的面包屑结构。
在Resources/views/base.html.twig 我这样调用主菜单:
{{ mopa_bootstrap_menu('MyAppBundle:Builder:mainMenu', {depth: 2}) }}
理想情况下是这样的子菜单:
{% set id = app.request.attributes.get('id') %}
{% if app.request.attributes.get('_route') starts with 'user_' %}
{% set menu = knp_menu_get('MyAppBundle:Builder:mainMenu', ['User'], {'id': id }) %}
{{ knp_menu_render(menu) }}
{% endif %}
但是:
- knpmenu 在渲染主菜单时返回错误,因为
$options['id']未定义 - 我仍然无法呈现二级菜单(因此通过传递参数“用户”) - 页面只是在该块中返回黑色输出
这种方法正确吗?
我正在使用"knplabs/knp-menu": "2.0.*@dev" 和"symfony/symfony": "2.5.*"
【问题讨论】: