每当有人将鼠标悬停在菜单按钮上时,我想制作一个drowdown框,即可使用KnpMenuBundle生成菜单。
我想得到的是这样的结构:
<lu>
<li><a>...</a></li>
<li>
<a>...</a>
<div>...</div>
</li>
<li><a>...</a></li>
<lu>
如果可能的话,我想从div内部渲染一个控制器。
可以这样做吗?
如果我错过了文档中的内容,请发布链接,因为我一直在搜索...
答案 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>
中,但这样做后没有造成太大问题。