一種方法是將視圖模型注入到您的佈局並將其渲染到那裏。
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