繁体   English   中英

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

[英]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.phpmyview.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM