[英]Access views in Models/Controllers
我有一个像这样的类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在同一目录中。
您正在创建一个新的Zend_View实例。 您不应该这样做。 要获取现有的视图实例,可以执行以下操作:
$view = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('view');
另外,我认为视图脚本路径应相对于APPLICATION_PATH/views/scripts
文件夹。
我这样做是这样的:
我将myview.phtml更改为myview.php
<div id='someid'><?= $this->str ?></div>
在myData类的render函数中:
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);
在我的代码中。
救命:
如果您使用的是完整的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
文档 ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.