对于我创建的每个新控制器和操作,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'。我该如何正确地做到这一点?
答案 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 。