【问题标题】: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:你能提供一个符合我上述要求的例子吗?

标签: php zend-framework view render


【解决方案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);

    帮助:

    【讨论】:

    • 这也适用于您使用 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...

    【讨论】:

      猜你喜欢
      • 2012-08-23
      • 2022-01-23
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      • 2013-11-17
      相关资源
      最近更新 更多