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
会导致轻微的性能下降,因为视图脚本需要在运行时解析。
我正在尝试根据从 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
会导致轻微的性能下降,因为视图脚本需要在运行时解析。