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

时间:2014-11-03 15:33:12

标签: zend-framework model-view-controller zend-framework2 zend-view zend-layout

我是ZF 2的新手,只是尝试在模块的视图目录之外渲染通用布局。

目前,我有一个模块“类别”,在“Categories \ view \ generic \”中,我已经拆分了所有常见的布局元素(即标题(包含菜单等),页脚,头部(包含css / javascripts) )这样我就可以将它们用于其他模块。参见屏幕截图以便澄清: enter image description here

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

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

2 - 我需要对配置文件进行哪些更改以及使其有效?

我曾尝试使用Evan的EdpModuleLayout

https://github.com/EvanDotPro/EdpModuleLayouts/

并尝试了

Set a generic layout for all modules in Zend framework 2

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

1 个答案:

答案 0 :(得分:1)

ZF2已经为所有模块提供了通用的共享布局。默认值为layout/layout.phtml。 只需将此文件放在Application modules视图目录中,它就会被共享给所有模块。

来自所有已加载模块的所有视图脚本都可以在其他模块中使用,您只需要为视图模型提供模板路径:

$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',
        ),
    ),

或在控制器本身:

 $this->layout('layout/layout.phtml');

或者如果您需要它是动态的话。

为您查看需要更改/或添加到视图管理器配置的文件的另一个目录

'template_path_stack' => array(
    __DIR__ . '/../view',
),

或者如果你需要它是动态的话:

$templatePathResolver = $this->getServiceLocator()->get('Zend\View\Resolver\TemplatePathStack');
    $templatePathResolver->setOptions(
        array(
            'script_paths' => array(
                $client_theme_path,
            )
        )
    );