一种方法是将视图模型注入到您的布局并将其渲染到那里。
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');
}
你只需要渲染的布局,然后里面的菜单..
layout.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);
如果它意味着无论控制器动作的展示,把它的布局呢? – Crisp
我无法放入布局,因为布局是在所有模块和模块之间共享不同的控制器。我应该分开为这个模块定义一个布局吗? – albanx
如果只有一个模块是很常见的,是的,模块特定的布局将成为 – Crisp