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

时间:2011-02-13 06:18:10

标签: php zend-framework view render

我有一个类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 位于同一目录中。

3 个答案:

答案 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 ...