如何使特定的控制器我ZF2模块加载其他布局文件?
考虑你IndexController
和AdminController
您ZF2应用程序模块和IndexController
使用layout.phtml但要使用adminlayout.phtml为AdminController
。
这怎么可能?
如何使特定的控制器我ZF2模块加载其他布局文件?
考虑你IndexController
和AdminController
您ZF2应用程序模块和IndexController
使用layout.phtml但要使用adminlayout.phtml为AdminController
。
这怎么可能?
class Module {
public function onBootstrap($e) {
$em = $application->getEventManager();
$em->attach(MvcEvent::EVENT_DISPATCH, function($e) {
$controller = $e->getTarget();
if ($controller instanceof Controller\AdminController) {
$controller->layout('layout/layoutadmin.phtml');
} else {
$controller->layout('layout/layout.phtml');
}
});
}
}
不要忘记在你的模块配置文件中添加该配置来注册新的控制器:
'controllers' => array(
'invokables' => array(
'Application\Controller\Index' => 'Application\Controller\IndexController',
'Application\Controller\Admin' => 'Application\Controller\AdminController',
),
),
其他最佳解决方案:
'view_manager' => array(
'template_path_stack' => array(
'YOURMODULENAME' => __DIR__ . '/../view',
),
'template_map' => array(
'layout/layout' => __DIR__ . '/../view/layout/layout.phtml',
),
),
改变YOURMODULENAME你的模块具体名称
而不是增加的逻辑在你的整个模块onBootstrap
方法,您可以使用控制器的onDispatch
方法,您只需设置为整个控制器的布局。
在您的管理控制,在顶部添加快捷方式:
use Zend\Mvc\MvcEvent;
然后,使用下面的onDispatch
在你的控制器:
public function onDispatch(MvcEvent $mvcEvent)
{
$this->layout()->setTemplate('layout/admin');
return parent::onDispatch($mvcEvent);
}
我相信这个解决方案是更好,因为当管理控制器被称作代码只被调用。