Symfony2 KnpMenuBundle具有动态参数的子项

时间:2013-10-17 14:32:59

标签: symfony knpmenubundle knpmenu

假设我有这样的路由设置:

users_list:
    pattern:  /users
    defaults: { _controller: AcmeBundle:User:list }

user_edit:
    pattern:  /user-edit/{id}
    defaults: { _controller: AcmeBundle:User:edit }

我想设置一个像这样的菜单

  • 主页
  • - 用户列表
  • ----用户版

但我不知道如何使用动态参数“id”处理我的路线'user_edit'。实际上我不想显示链接(哪个ID?),但如果我编辑用户,我希望“用户列表”父节点处于活动状态。

我试过这样的事情

$userNode = $rootNode->addChild('Users list', array(
    'route' => 'users_list',
));
$userNode->addChild('User edition', array(
    'route' => 'user_edit',
));

Symfony抱怨缺少参数:(

谢谢!

2 个答案:

答案 0 :(得分:3)

如果您想要显示链接,此设置应该有效:

$userNode->addChild('User edition', array(
    'route' => 'user_edit',
    'routeParameters' => array('id' => $someParameter)
));

要将parrent节点设置为活动,您可以使用自定义渲染器,覆盖menubundle的模板,或者只是根据以下条件将活动类添加到菜单项:

{% if app.request.attributes.get('_route') == 'user_edit' %}
       {# activate parrent node #}
{% endif %}

答案 1 :(得分:3)

在我的案例中找到了一些有用的东西,你可以使用菜单定义类中的请求来解决这个问题:

$userNode->addChild('User edition', array(
    'route' => 'user_edit',
    'routeParameters' => array('id' => $this->getRequest()->get('id'))
));