为什么我收到“对非对象的成员函数调用”错误?

时间:2011-06-06 22:54:07

标签: php mysql zend-framework

我正在使用Zend框架,由MySQL支持,并尝试设置索引视图。但是,使用我的代码,我不断收到“对非对象的成员函数调用”错误,我不知道如何解决它。这是我的索引页面的控制器:

 public function indexAction() {
     $dImage = new Application_Model_DImage();
 }

以下是它引用的DImage模型的代码:

public function getImageDesCol ($Id) {
    return $this->getDb()->fetchCol("SELECT description FROM d_image WHERE d_id = ?", $Id);
}

最后,这是我的索引视图页面的源代码,我正在尝试显示DImage模型中的值:

  <?php $description = $this->dImage->getImageDesCol($id) ?>
  <label><?php echo $description[0] ?></label>

当我加载该页面时,我得到“在非对象上调用成员函数getImageDesCol()”而不是呈现页面。由于我是Zend框架和PHP的新手,所以我觉得我有一些明显缺失的东西。我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:3)

变化:

 public function indexAction()
 {
     $dImage = new Application_Model_DImage();
 }

要:

 public function indexAction()
 {
     $this->dImage = new Application_Model_DImage();
 }

答案 1 :(得分:2)

您必须将 Application_Model_DImage 对象添加到视图中,否则视图不知道具有该名称的对象。这样做:

public function indexAction()
{
    $dImage = new Application_Model_DImage();
    $this->view->dImage = $dImage;
}

然后,您的$ dImage可用于您的视图脚本。

您的视图脚本在 Zend_View 对象的上下文中执行,但您在控制器的上下文中创建了 Application_Model_DImage 对象( Zend_Controller_Action的实例)。因此,您需要显式传递视图脚本将使用的任何对象。默认情况下, Zend_Controller_Action 已准备好 view 对象(请查看here)。