0

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

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

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

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

这可以做到吗?

如果我错过了文档中的某些内容,请发布链接,因为我已经搜索了几个小时......

4

1 回答 1

2

可以做到的,我曾经也确实这样做过,但是这种事情是否应该使用 KnpMenuBundle 我不太确定!无论如何,我通过将 MenuBuilder 类定义为服务并注入 @template 服务来实现这一点。这不会像您提到的那样调用控制器操作,但允许您呈现您希望的任何模板......

/**
 * @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>但经过一些造型后这并没有造成太大问题。

于 2012-09-10T20:57:30.143 回答