Zend ViewModel setTemplate 的基本目录是什么?

What is the base directory for Zend ViewModel setTemplate?

我正在尝试根据从 Regex 路由获取的值加载不同的视图,但我无法让 ViewModel 加载模板

public function viewAction()
{
    $page = $this->params()->fromRoute()["page"];

    $view = new ViewModel();
    $view->setTemplate('module/Base/view/base/index/$page');

    return $view;
}

我遵循常规模块设置:

Base
|- config
|  |- module.config.php
|- src
|  |- Base
|     |- Controller
|        |- IndexController.php
|- view
   |- base
   |  |- index
   |     |- index.phtml
   |     |- other.phtml
   |- layout

而我的 view_manager 配置是:

'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__ . '/../view/layout/layout.phtml',
        'error/404'            => __DIR__ . '/../view/error/404.phtml',
        'error/index'          => __DIR__ . '/../view/error/index.phtml',
    ),
    'template_path_stack' => array(
        __DIR__ . '/../view',
    ),
),

我已经尝试了传递给 setTemplate 的路径中的各种值,但我只是不断收到应用程序错误消息,但没有错误日志或详细信息(这可能是因为我没有想出正确显示错误的方法).我已确认 $page 从 URL 中正确获取模板的名称,并且模板位于正确的目录中。

那么,ViewModel 从哪里开始寻找模板呢?

我试过:

$view->setTemplate('$page.phtml');
$view->setTemplate('$page');
$view->setTemplate('base/index/$page.phtml');
$view->setTemplate('base/index/$page');
$view->setTemplate('module/Base/view/base/index/$page.phtml');
$view->setTemplate('module/Base/view/base/index/$page');

我是这样使用的:

在模块内的视图文件夹后添加路径。所以我假设你的是

view->setTemplate('base/index/$page');

这应该可以解决问题。

每个需要查看脚本的模块都应该在 module.config.php

中有一个 view_manager

注册视图脚本时有两种选择。

'view_manager' => [
    'template_map' => [
        'module-name/foo/bar' => __DIR__ . '/../view/foo/bar.phtml',
        'custom_view_template_name' => __DIR__ . '/../view/some/other/path/bar.phtml',
    ],
    'template_path_stack' => [
        __DIR__ . '/../view',
    ],
],

模板路径堆栈

这表示视图解析器将尝试从中查找路径的路径集合(堆栈)。

您在控制器中的视图模型上设置的视图脚本将相对于此目录路径。此选项通过 'automatically' 使用通用命名约定解析视图脚本路径来节省您的时间。

例如,如果您有 FooModule 和文件 FooModule/view/foo-module/index/index.phtml,则应在控制器中使用的模板路径为 foo-module/index/index

模板地图

模板名称到模板路径的一对一映射。这意味着模板路径与数组键完全相同。

您应该尝试使用此方法,因为使用 template_path_stack 会导致轻微的性能下降,因为视图脚本需要在运行时解析。