访问模型/控制器中的视图

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.phpmyview.phtml 在同一目录中。

【问题讨论】:

@prodigitalson:你能提供一个符合我上述要求的例子吗? 【参考方案1】:

您正在创建一个新的 Zend_View 实例。你不应该这样做。要获取现有视图实例,您可以执行以下操作:

$view = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('view');

另外,我认为视图脚本路径应该是相对于APPLICATION_PATH/views/scripts 文件夹的。

【讨论】:

【参考方案2】:

我是这样做的:

我将 myview.phtml 更改为 myview.php

&lt;div id='someid'&gt;&lt;?= $this-&gt;str ?&gt;&lt;/div&gt;

在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-&gt;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...

【讨论】:

以上是关于访问模型/控制器中的视图的主要内容,如果未能解决你的问题,请参考以下文章

如何从 CodeIgniter 中的视图访问模型

我需要一次访问视图 2 或 3 或 n 中的模型数据

使用 rxSwift 中的 tableView 单元将数据从视图模型传递到视图控制器

在 Swift 中跨多个选项卡访问相同的视图模型

asp.net mvc c# - 是不是可以从 CodeBehind 中的模型访问视图中文本框的值?

Rails:如何跨视图访问模型和控制器数据?