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のやり方で正しいですか?:)