如何将div添加到KnpMenu(Symfony2.1)

时间:2012-09-10 20:46:05

标签: symfony symfony-2.1 knpmenubundle knpmenu

每当有人将鼠标悬停在菜单按钮上时,我想制作一个drowdown框,即可使用KnpMenuBundle生成菜单。

我想得到的是这样的结构:

<lu>
    <li><a>...</a></li>
    <li>
        <a>...</a>
        <div>...</div>
    </li>
    <li><a>...</a></li>
<lu>

如果可能的话,我想从div内部渲染一个控制器。

可以这样做吗?

如果我错过了文档中的内容,请发布链接,因为我一直在搜索...

1 个答案:

答案 0 :(得分:2)

它可以完成,我曾经做过这个,但是这种事情是否应该使用KnpMenuBundle完成我不太确定!无论如何,我通过将我的MenuBuilder类定义为服务并注入@templating服务来实现这一点。这不会像你提到的那样调用控制器动作,但允许你渲染你想要的任何模板......

/**
 * @param Request $request
 * @return \Knp\Menu\ItemInterface
 */
protected function createUserMenuLoggedOut(Request $request)
{
    $menu = $this->factory->createItem('root');

    $signInItem = $menu->addChild('Sign in', array('route' => 'fos_user_security_login'));
    $signInItem
        ->setLinkAttributes(array(
            'id' => 'sign-in-link',
            'class' => 'dropdown-toggle',
            'data-toggle' => 'dropdown',
            'data-target' => '#signin'
        ))
        ->setAttributes(array(
            'id' => 'signin',
            'class' => 'dropdown'
        ))
    ;

    // THIS IS THE LINE YOU'RE INTERESTED IN
    $signInItem->addChild($this->templating->render('ApplicationSonataUserBundle:Security:login_options.html.twig'));

    // more menu items...

    return $menu;
}

如果我没记错的话,我认为这最终将模板包装在一个额外的<ul>...</ul>中,但这样做后没有造成太大问题。