2011-06-06 93 views
3

我正在使用由MySQL支持的Zend框架,并试图设置索引视图。但是,对于我所拥有的代码,我总是收到“对非对象的成员函数调用”错误,我不知道如何解决它。下面是我的索引页控制器:为什么我会收到“对非对象的成员函数调用”错误?

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

必须在Application_Model_DImage对象添加到视图,否则视图不知道这个名字的对象。做到这一点:

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

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

视图脚本的执行时间为Zend_View的对象的上下文,但你在你的控制器(的化Zend_Controller_Action一个实例)的情况下被创建Application_Model_DImage对象。因此,您需要显式传递视图到视图脚本将使用的任何对象。默认情况下,Zend_Controller_Action有一个视图对象为您准备(检查here)。

+0

Yup可以工作,但我无法显示它应该做的数据。 – Varun 2011-06-06 23:23:40

+0

@Varun问题可能在于getImageDesCol($ Id)方法。而是从数据库返回数据,尝试返回一个固定的字符串(例如,返回“test!”;),并检查它是否打印。如果它打印,然后调试您的数据库查询。 – faken 2011-06-06 23:26:58

+0

它的工作!非常感谢你们! – Varun 2011-06-06 23:29:50

3

变化:

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

要:

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

嘿谢谢你的回复。我只是这样做,但它不工作。我得到了相同的错误信息 – Varun 2011-06-06 23:05:30

相关问题