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 クラスをサービスとして定義し、@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>が、少しスタイリングした後は大きな問題は発生しませんでした。

于 2012-09-10T20:57:30.143 に答える