それは可能であり、私はかつてこれを正確に実行しましたが、この種のことを 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>
が、少しスタイリングした後は大きな問題は発生しませんでした。