0

ZF2のメニューについて質問です。

たとえば、1 つのモジュールと 2 つのコントローラーがあります。レイアウトでは、メニューをレンダリングできます。

<?php echo $this->navigation()->menu('mainMenu'); ?>
<?php echo $this->navigation()->menu('settingsMenu'); ?>

しかし、現在のコントローラーに応じて個別にレンダリングしたいので、レイアウトでは次のようにする必要があります。

$this->menu;

コントローラーに応じて、変数「メニュー」をメニューとして登録するにはどうすればよいですか。「onBootstrap」メソッドで実行しようとしましたが、失敗しました。


私はこのようにしました:

Module.php:

public function onBootstrap(MvcEvent $e)
{
    $e->getApplication()->getEventManager()->attach(MvcEvent::EVENT_DISPATCH, array($this, 'headMenuAttach'));
}

public function headMenuAttach(MvcEvent $e)
{
    $controller = $e->getTarget();

    if (method_exists($controller, 'getHeadMenu')) {
        $menu = $controller->getHeadMenu();
        $controller->layout()->setVariable('MainMenu', $menu);
    }
}

レイアウト:

$this->navigation()->menu($this->MainMenu);

コントローラ:

public function getHeadMenu()
{
    return 'settingsMenu';
}

ZF2のやり方で正しいですか?:)

4

2 に答える 2

1

Jurian がここで説明しているように、DefaultNavigationFactory を拡張して 2 つ目のナビゲーション オブジェクトを作成する必要があります。

于 2013-04-24T12:17:48.693 に答える