如何从Zend Framework 2中的视图文件夹外的另一个模块渲染视图?

时间:2016-05-19 14:38:41

标签: zend-framework2 partial-views partials zend-view

我想将整个错误处理捆绑在一个模块中。它到目前为止工作,但错误模板仍然是默认的[project root]/module/Application/view/error/index.phtml。我想使用它,但我的附加代码包装。为此,我需要将默认的异常模板添加为部分。不可能(不再)将模块名称传递给Partial视图助手。所以我尝试了这个(建议here):

[project root]/module/ErrorHandling/view/exception.phtml

echo $this->partial('Application/error/index');

但它不起作用:

  

Zend \ View \ Exception \ RuntimeException:Zend \ View \ Renderer \ PhpRenderer :: render:无法呈现模板“Application / error / index”;解析器无法解析为/ var / www /.../ my-project / vendor / zendframework / zend-view / src / Renderer / PhpRenderer.php中的文件:494

它仅适用于/module/{AnotherModule}/view/{another-module}子文件夹中的视图。

如何从另一个模块(但在/module/{AnotherModule}/view/{another-module}子文件夹之外)获取视图呈现为部分视图?

2 个答案:

答案 0 :(得分:0)

解决方法是将所需视图添加到View Manager的模板映射中,例如:

<强> config/autoload/global.php

return [
    'view_manager' => [
        'template_map' => [
            'default_zf_error_view' => __DIR__ . '/../../module/Application/view/error/index.phtml'
        ]
    ]
];

它有效,但知道如何以更清洁的方式解决这个问题仍然会很有趣。

答案 1 :(得分:0)

您不必在global.php

中添加它

将它添加到模块的module.config.php就足够了。这些视图也可以在其他模块中访问,因为ZF2合并了不同模块的所有配置文件。请在此处详细了解in the documentation in the chapter Advanced Configuration Tricks

所以在module.config.php

return [

    //...

    'view_manager' => [
        'template_map' => [
            'default_zf_error_view' => __DIR__ . '/../../module/Application/view/error/index.phtml'
        ]
    ]

    //...

];

在任何其他模块的控制器中,您现在可以执行以下操作:

$viewModel->setTemplate('default_zf_error_view');