如何在zf2 AbstractRestfulController中调用模板文件

时间:2016-11-14 11:13:30

标签: php zend-framework zend-framework2 restful-architecture

我尝试在Zend Framework 2.5 AbstractRestfulController中渲染模板文件,但代码中出现了错误或缺失。我该怎么办?

控制器代码

使用Zend \ View \ Model \ ViewModel;

class trial extends AbstractRestfulController{

        public function DetailTalktrackAction(){

            $view = new ViewModel();
            $view->setTemplate('api/trial/specialty_talktrack');
            $view->setTerminal(true);
            $html = $this->getServiceLocator()->get('viewrenderer')->render($view);
            echo $html;
            exit;

        }

}

模块文件夹

- Api
-- config
-- src
--- Api
---- Controller
----- TrialController.php
-- view
--- api
--- trial
---- specialty_talktrack.phtml

错误

 "class": "Zend\\View\\Exception\\RuntimeException",
 "file": "/opt/lampp/htdocs/crush/phase2/vendor/zendframework/zend-view/src/Renderer/PhpRenderer.php",
 "line": 494,
 "message": "Zend\\View\\Renderer\\PhpRenderer::render: Unable to render template \"api/trial/specialty_talktrack\"; resolver could not resolve to a file"

1 个答案:

答案 0 :(得分:3)

1)template_map

您的模板文件应在密钥view_manager内的template_map配置中定义。您可以在in the documentation for Zend\View上阅读更多内容。

//...
'view_manager' => array(
     'template_map' => array(
         'api/trial/specialty_talktrack' => ...path to your file...
     )
),
//...

来自Zend\View文档:

  

TemplateMapResolver允许您直接映射模板名称     到特定的模板。以下地图将提供位置     用于主页模板("应用程序/索引/索引"),以及用于     布局("布局/布局"),错误页面("错误/索引"),以及     404页面("错误/ 404"),解析它们以查看脚本。

    'template_map' => array(
        'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
        'site/layout'             => __DIR__ . '/../view/layout/layout.phtml',
        'error/index'             => __DIR__ . '/../view/error/index.phtml',
        'error/404'               => __DIR__ . '/../view/error/404.phtml',
    ),

2)template_path_stack

您还可以检查the example from the ZF2 album application tutorial他们设置template_path_stack的位置,这类似于用于搜索模板文件的默认文件夹。如果您想默认搜索视图文件夹中的视图,可以将此路径添加到template_path_stack,如下所示:

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

来自Zend\View文档:

  

TemplatePathStack采用一系列目录。目录   然后以LIFO顺序(它是一个堆栈)搜索所请求的内容   查看脚本。这是快速应用的一个很好的解决方案   开发,但可能会引入性能开支   由于必要的静态调用次数而产生。

     

以下内容添加了一个指向视图目录的条目   目前的模块。确保模块之间的密钥不同   确保它们不被覆盖 - 或者只是省略密钥!

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