针对不同控制器的不同布局文件
问题描述:
如何让我的ZF2模块为特定控制器加载其他布局文件?针对不同控制器的不同布局文件
考虑您的ZF2应用模块中有IndexController
和AdminController
和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到您的模块专用名称
+0
我正在尝试这个,但是不工作,它真的不在乎'布局/布局' – albanx 2013-04-18 14:25:32
+0
你应该确认路由器是你的路由辅助模块用于加载然后调度...请将代码上传到某处 – 2013-04-19 07:06:22
只是想读其他人可能会阅读是。如果你认为你需要不同的布局,那么在你的构架中可能会有一些改进。一般来说你只需要一个布局。如果你需要两种布局,也许你应该有两个独立的应用程序(或两个单独的入口点)。或者,也许你需要更深思熟虑地使用新的ZF2嵌套视图模型系统......只是想法。 – superdweebie 2012-08-12 22:22:47
也许它是很好的使用A模块索引然后一个模块管理 – 2012-08-14 09:40:41
我已经修复了你的标记。提供一个解释和利用这个解决方案会改善这个答案很多。 (例如,为什么或为什么不这样做而不是手动指定控制器中的布局?) – Matsemann 2012-08-14 11:50:41