访问模型/控制器中的视图
Posted
技术标签:
【中文标题】访问模型/控制器中的视图【英文标题】:Access views in Models/Controllers 【发布时间】:2011-06-26 08:22:10 【问题描述】:我有一个像这样的 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 在同一目录中。
【问题讨论】:
@prodigitalson:你能提供一个符合我上述要求的例子吗? 【参考方案1】:您正在创建一个新的 Zend_View 实例。你不应该这样做。要获取现有视图实例,您可以执行以下操作:
$view = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('view');
另外,我认为视图脚本路径应该是相对于APPLICATION_PATH/views/scripts
文件夹的。
【讨论】:
【参考方案2】:我是这样做的:
我将 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);
。
帮助:
http://framework.zend.com/manual/en/zend.view.scripts.html http://forums.zend.com/viewtopic.php?f=69&t=3966#p15370 http://framework.zend.com/issues/browse/ZF-2353【讨论】:
这也适用于您使用 Zend Framework 运行具有剥离引导程序的 cronjobs 的情况。【参考方案3】:如果您使用的是完整的 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...
【讨论】:
以上是关于访问模型/控制器中的视图的主要内容,如果未能解决你的问题,请参考以下文章
使用 rxSwift 中的 tableView 单元将数据从视图模型传递到视图控制器