Zend framework Zend 2挑战:如何配置Zend Framework 2以在模块外部保存通用模板?

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,只是尝试在模块的视图目录外呈现通用布局

目前,我有一个模块“categories”,在“categories\view\generic\”中,我已经拆分了所有常见的布局元素(即页眉(包含菜单等)、页脚、页眉(包含css/javascripts)),以便我可以将它们用于其他模块。有关说明,请参见屏幕截图:

我不想一次又一次地为每个模块创建相同的布局(页眉、页脚、菜单),而是希望所有模块都可以访问这些布局/视图。(例如,用户、类别模块应该始终具有相同的页脚、页眉)。 我的问题是:

1-作为最佳实践,在我的情况下,我应该将我的通用布局文件放在哪里,以使项目中的所有模块都可以访问它们?一般来说,通用布局不应该位于特定模块的视图目录中

2-我需要在何处对配置文件进行哪些更改才能使其正常工作

我试着玩埃文的EDP游戏

()

也试过了

“”

但是没有成功。如果有人能在这方面指导我,我将不胜感激。
谢谢

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,
            )
        )
    );