一种方法是将 ViewModel 注入您的布局并在其中呈现。
模块.php
/**
* On bootstrap event
*
* @param \Zend\Mvc\MvcEvent $e
*/
public function onBootstrap(MvcEvent $e)
{
// ..
$viewModel = $e->getViewModel();
$menu = new ViewModel();
$menu ->setTemplate('module/menu/something');
$viewModel->addChild($menu, 'menu');
}
然后,您只需要在布局内呈现菜单..
布局.phtml
<?php if(isset($menu)) echo $menu ?>
如果您想要不同的效果,您也可以附加到不同的事件上,例如,如果您在某个模块中,则只注入模块,或者注入任何扩展抽象控制器的控制器:
// Bootstrap ///
$e->getApplication()->getEventManager()->getSharedManager()
->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($e) {
$controller = $e->getTarget();
$controllerClass = get_class($controller);
$moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\'));
// logic to decide what you want
$viewModel = $e->getViewModel();
$menu = new ViewModel();
$menu ->setTemplate('module/menu/something');
$viewModel->addChild($menu, 'menu');
}, 100);