Zend framework Zend 2挑战:如何配置Zend Framework 2以在模块外部保存通用模板?
我不熟悉ZF2,只是尝试在模块的视图目录外呈现通用布局 目前,我有一个模块“categories”,在“categories\view\generic\”中,我已经拆分了所有常见的布局元素(即页眉(包含菜单等)、页脚、页眉(包含css/javascripts)),以便我可以将它们用于其他模块。有关说明,请参见屏幕截图: 我不想一次又一次地为每个模块创建相同的布局(页眉、页脚、菜单),而是希望所有模块都可以访问这些布局/视图。(例如,用户、类别模块应该始终具有相同的页脚、页眉)。 我的问题是: 1-作为最佳实践,在我的情况下,我应该将我的通用布局文件放在哪里,以使项目中的所有模块都可以访问它们?一般来说,通用布局不应该位于特定模块的视图目录中 2-我需要在何处对配置文件进行哪些更改才能使其正常工作 我试着玩埃文的EDP游戏 () 也试过了 “” 但是没有成功。如果有人能在这方面指导我,我将不胜感激。Zend framework Zend 2挑战:如何配置Zend Framework 2以在模块外部保存通用模板?,zend-framework,model-view-controller,zend-framework2,zend-view,zend-layout,Zend Framework,Model View Controller,Zend Framework2,Zend View,Zend Layout,我不熟悉ZF2,只是尝试在模块的视图目录外呈现通用布局 目前,我有一个模块“categories”,在“categories\view\generic\”中,我已经拆分了所有常见的布局元素(即页眉(包含菜单等)、页脚、页眉(包含css/javascripts)),以便我可以将它们用于其他模块。有关说明,请参见屏幕截图: 我不想一次又一次地为每个模块创建相同的布局(页眉、页脚、菜单),而是希望所有模块都可以访问这些布局/视图。(例如,用户、类别模块应该始终具有相同的页脚、页眉)。 我的问题是:
谢谢ZF2已经为所有模块提供了通用的共享布局。默认值为
layout/layout.phtml
。
只要把这个文件放在applicationmodules视图目录中,它就会为所有模块共享
所有加载模块中的所有视图脚本都可以在其他模块中使用,您只需为视图模型提供模板路径:
$viewModel->setTemplate('application/index/index');
以下是默认值:
$viewModel->setTemplate('[module namespace]/[controller]/[action]');
但是,当您手动提供模板路径时,它们可以是已注册视图目录中的任何内容
也可以在视图管理器配置中更改默认布局文件路径:
'view_manager' => array(
'display_not_found_reason' => true,
'doctype' => 'HTML5',
'not_found_template' => 'error/404',
'exception_template' => 'error/index',
// 'layout' => 'layout/layout.phtml',//<----------------------------
'template_path_stack' => array(
__DIR__ . '/../view',
),
'strategies' => array(
'ViewJsonStrategy',
),
),
或者在一个事件中,如果你需要它是动态的
要为视图文件定义另一个目录,需要更改/或添加到视图管理器的配置中
'template_path_stack' => array(
__DIR__ . '/../view',
),
或者在e事件中,如果您需要它是动态的:
$templatePathResolver = $this->getServiceLocator()->get('Zend\View\Resolver\TemplatePathStack');
$templatePathResolver->setOptions(
array(
'script_paths' => array(
$client_theme_path,
)
)
);
默认情况下,所有模块都可以访问视图,无需执行任何特殊操作。您当前遇到了什么错误?我知道视图是可访问的,但希望为特定模块范围外的通用布局创建一个单独的存储库。是否可能?当然,只需创建一个单独的模块,其中仅包含您的通用视图/布局。我已创建了一个单独的模块,但Zend renderer找不到路径,给我的警告包括(C:\wamp\www\Wex\module\Users\config/。/view/layout/layout.phtml):打开流失败:在C:\wamp\www\Wex\vendor\zendframework\zendframework\library\Zend\view\Renderer\PhpRenderer.php中没有这样的文件或目录“您使用的是什么代码生成该错误?”?
$templatePathResolver = $this->getServiceLocator()->get('Zend\View\Resolver\TemplatePathStack');
$templatePathResolver->setOptions(
array(
'script_paths' => array(
$client_theme_path,
)
)
);