我对 ZF2 中的菜单有疑问。
例如,我有一个模块和两个控制器。在布局中,我可以渲染菜单:
<?php echo $this->navigation()->menu('mainMenu'); ?>
<?php echo $this->navigation()->menu('settingsMenu'); ?>
但我想根据当前控制器分别渲染它们,并且在布局中它必须是这样的:
$this->menu;
如何根据控制器将变量“菜单”注册为菜单。我试图在“onBootstrap”方法中做到这一点,但我失败了。
我是这样做的:
模块.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 方式是否正确?:)