1

Symfony2 と Knpmenu を使用して、以下を処理するメニューを作成するのに苦労しています:

  • パン粉
  • 動的パラメータによるルーティング
  • 異なる子で始まる個別のメニューのレンダリング

私のMenu/Builder.phpファイルは次のようになります (navbar、pull-nav などの余分なビットは、ブートストラップ クラスを使用してレンダリングを処理する mopa_bootstrap 拡張機能の一部です):

namespace My\AppBundle\Menu;

use Knp\Menu\FactoryInterface;

class Builder
{
    public function mainMenu(FactoryInterface $factory, array $options)
    {
        $menu = $factory->createItem(
            'root', array(
                'navbar' => true,
                'pull-right' => true,
            )
        );

        // Main Menu -> Config
        // no link here, it's just a placeholder
        $dropdown = $menu->addChild(
            'Config', array(
                'dropdown' => true,
                'caret' => true,
            )
        );

        // Menu -> Config -> User
        $dropdown2 = $dropdown ->addChild(
            'User', array(
                'route' => 'user',
            )
        );

        // Secondary Menu -> Edit (but child of Menu -> Config -> User)
        $dropdown2->addChild(
            'Edit',
            array(
                'route' => 'user_edit',
                'routeParameters' => array('name' => $options['id']),
            )
        );

アイデアは、最初の 2 つのレベルのみを印刷するメイン メニューと、表示されている特定の要素の編集/削除/任意のビュー間をユーザーが移動できるように別の場所にレンダリングされる別のメニューを用意することです。

私が達成しようとしているのは、親構造を処理するための単一の構造を持つことです。メニューでアクティブとして親に署名するだけでなく、作業中のブレッドクラム構造を処理できるようにすることです。

Resources/views/base.html.twig私はこのようにメインメニューを呼び出しています:

{{ mopa_bootstrap_menu('MyAppBundle:Builder:mainMenu', {depth: 2}) }}

理想的には、次のようなサブメニューです。

{% set id = app.request.attributes.get('id') %}
{% if app.request.attributes.get('_route') starts with 'user_' %}
    {% set menu = knp_menu_get('MyAppBundle:Builder:mainMenu', ['User'], {'id': id }) %}
    {{ knp_menu_render(menu) }}
{% endif %}

でも:

  1. $options['id']定義されていないため、メイン メニューのレンダリング時に knpmenu がエラーを返す
  2. 私はまだセカンダリ メニューをレンダリングできません (したがって、パラメータ 'User' を渡すことによって) - ページはそのブロックで黒の出力を返すだけです

このアプローチは正しいですか?私は使用"knplabs/knp-menu": "2.0.*@dev"しています"symfony/symfony": "2.5.*"

4

1 に答える 1