1 つの方法は、ViewModel をレイアウトに挿入し、そこにレンダリングすることです。
Module.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);