我希望构建我的ZF2源以按模块层次结构获取特定布局
然后,如果模板文件存在,我想将其映射到当前模块
例如:
======================================
我在ZF2 Skeleton Apps中得到了这个
'view_manager' => array (
'display_not_found_reason' => true,
'display_exceptions' => true,
'doctype' => 'HTML5',
'not_found_template' => 'error/404',
'exception_template' => 'error/index',
'template_map' => array (
'layout/layout' => __DIR__ . '/../../../template/layout/layout.phtml',
'layout/custom' => __DIR__ . '/../../../template/layout/custom.phtml',
'error/404' => __DIR__ . '/../../../template/error/404.phtml',
'error/index' => __DIR__ . '/../../../template/error/index.phtml'
),
'template_path_stack' => array (
__DIR__ . '/../view'
)
)
我可以通过这种方式设置自定义布局
$e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($e) {
$controller = $e->getTarget();
$controller->layout('layout/custom');
}
但我必须手动定义'template_map'。有没有办法设置当前控制器特定的模板文件?我想要这样的东西
//Set template
$template = 'layout/layout';
if (file_exists($templatePath . $currAction.'.phtml')) {
$template = $currAction;
}else if(file_exists($templatePath . $currController.'.phtml')) {
$template = $currController;
}else if(file_exists($templatePath . $currModule.'.phtml')) {
$template = $currModule;
}else{
//return default template
}
$controller->layout($template);
由于
=====
2012年11月27日更新:
我找到了一些简单的方法来映射布局键:
在module.config.php中只添加一个添加路径
'view_manager' => array (
.....
'template_path_stack' => array (
__DIR__ . '/../view/',
__DIR__ . '/../../../template/'
)
)
然后我可以使用模板层次结构系统。但仅适用于模块和控制器级别。我的问题是布局和“动作视图”冲突