我有一个类MyData.php,如下所示:
class myData {
function render() {
$view = new Zend_View();
$view->str = 'This is string.';
echo $view->render('myview.phtml');
}
}
和myview.phtml文件:
<div id='someid'><?= $this->str ?></div>
在另一种观点中,我正在做这样的事情:
<?php
$obj = new myData ();
$obj->render(); // it should be <div id='someid'>This is string.</div>
?>
它给了我以下例外:
Message: no view script directory set; unable to determine location for view script
MyData.php 和 myview.phtml 位于同一目录中。
答案 0 :(得分:5)
您正在创建一个新的Zend_View实例。你不应该这样做。要获取现有视图实例,您可以执行以下操作:
$view = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('view');
另外,我认为视图脚本路径应该相对于APPLICATION_PATH/views/scripts
文件夹。
答案 1 :(得分:3)
我是这样做的:
我将 myview.phtml 更改为 myview.php
<div id='someid'><?= $this->str ?></div>
在myData类中渲染函数:
class myData {
function render() {
$view = new Zend_View();
$view->setScriptPath( "/Directory/Path/For/myview/php/file" );
$view->str = 'This is string.';
echo $view->render('myview.php');
}
}
所有事情都按照我的问题进行。我的代码中缺少$view->setScriptPath($path);
。
帮助强>
答案 2 :(得分:2)
如果你是完整的MVC堆栈,你最好只为这类东西创建一个视图助手......或者只是传递使用Partial视图助手并将对象传递给它。
例如,使用现有的Zend_View_Helper_Partial ....
在控制器中创建myData对象并将其分配给视图:
public function indexAction()
{
$this->view->mydata = new MyData();
}
在行动的视图中:
echo $this->partial('myview.phtml', array('obj' => $this->mydata));
然后在myview.phtml
你可以做到:
<div><?php echo $this->obj->somevar ?></div>
对于您的示例,您甚至根本不需要myData对象,只需将str
变量分配给视图并将其传递给部分而不是创建对象。
您应该阅读Zend_View
docs ...