Zend重用视图

时间:2011-06-14 10:55:16

标签: php zend-framework zend-view

对于我创建的每个新控制器和操作,Zend需要/views/scripts/controllername中的模板文件。但是,我希望有多个操作共享一个模板,数据库中的文本可以注入其中。

我目前使用echo $this->layout()->content布局和委托特定于页面的视图。我尝试了以下方法:

class SomeController extends Zend_Controller_Action{

    public function someAction() {
        $path = $this->view->getScriptPath();
        $this->view = new Zend_View();
        $this->view->setScriptPath($path);
        $this->view->render('default.phtml');
    }
}

但是,我收到错误,在路径中找不到脚本'some / some.phtml'。我该如何正确地做到这一点?

2 个答案:

答案 0 :(得分:2)

你必须使用'default'(没有扩展名)并直接调用方法(不在视图上),例如。

$this->render('default');

请参阅Zend_Controller_Action::render

  

render(string | null $ action = null,string | null $ name = null,bool $ noController = false):void

     

渲染视图

     

呈现视图。默认情况下,视图脚本路径中的视图为/.phtml。您可以通过重置{@link $ viewSuffix}来更改脚本后缀。您可以通过为$ noController指定boolean true来省略控制器目录前缀。

     

默认情况下,渲染的内容会附加到响应中。您可以通过指定$ name来指定要设置的命名正文内容段。


如果要提供特定脚本,请使用

$this->renderScript('controller/action.phtml');

请参阅Zend_Controller_Action::renderScript

  

renderScript(字符串$ script,string $ name = null):void

     

渲染给定的视图脚本

     

与{@link render()}类似,此方法呈现视图脚本。但是,与render()不同,它不会通过{@link getViewScript()}自动确定视图脚本,而是将脚本传递给它。如果您知道要使用的确切视图脚本名称和路径,或者使用不符合getViewScript()定义的规范的路径,请使用此方法。

     

默认情况下,渲染的内容会附加到响应中。您可以通过指定$ name来指定要设置的命名正文内容段。

答案 1 :(得分:0)

如果您选择使用 viewRenderer ,并且需要从另一个控制器中选择一个视图,则必须将$ noController参数设置为TRUE:

<强> BookController的:

public function saveBookAction()
{ 
    ...
    $this->_helper->viewRenderer('/approval/index', null, $noController = true);
}

这将查找视图 /views/scripts/approval/index.phtml 而不是默认的 /views/scripts/book/save-book.phtml