2011-05-19 40 views
3

我在我看来有一个包含partialLoop的部分。 但是当我跑,我有以下错误信息的页面:Zend将变量传递给部分视图内的PartialLoop

Call to a member function countComments() on a non-object in ...'_loop.phtml' 

这是我打电话给我的部分,从我的观点中:

echo $this->partial('_post.phtml',$this->post); 

其中$这个 - >后是DB检索排

这是我部分的内容:

MY simplified Partial! 

echo $post->countComments();//the count number is correctly output.. 
echo $this->partialLoop('_loop.phtml',$this->object); 

这是我partialLoop的内容:

echo $this->object->countComments();//no output! 

引导我已设置:

$view->partial()->setObjectKey('object'); 
$view->partialLoop()->setObjectKey('object'); 

这是从谐音内调用partialLoops正确的方式?

P.s.我var_dumped $ this->我的部分里面的对象,它是一个PostRow OBJECT.I var倾倒$ this-> object到_loop.phtml中,我有5个NULLS(代表我的ID,标题,文本,作者,日期时间字段后)

感谢

卢卡

+0

这是什么:'echo $ post-> countComments();'。不应该是'echo $ post-> object-> countComments();'? – user594791 2011-05-19 09:34:34

+0

我不知道它.. – luca 2011-05-19 10:32:25

回答

4

我认为原因是,当你通过$this->post到局部视图助手这样的:

$this->partial('_post.phtml',$this->post); 

局部视图助手将执行其toArray()方法。因此,你的$this->object是一个数组,你正在向你的partialLoop传递一个数组。因此,在您的partialloop中,您试图在表示行后对象的数组上执行countComments(),而不是实际的行对象。

为了避免这种情况,我会建议使用数组符号,e.g传递变量局部和partialLoop视图助手:

$this->partial('_post.phtml',array('post' => $this->post)); 

希望这有助于。

+0

我var_dumped $ this-> object:里面partial是一个PostRow Object.Inside partialLoop是NULL.Relying你的答案不应该我看到一个数组??谢谢 – luca 2011-05-19 08:03:08

+0

实际上在部分循环var_dump($这个 - >对象)输出5 NULLS(我认为它们代表我的帖子行的ID,标题,文本,作者,日期时间字段) – luca 2011-05-19 08:24:43

+0

我解决了感谢,但仍然困惑我通过使用数组符号传递变量做了什么。进一步的解释将非常感谢! – luca 2011-05-19 11:00:41

1

此错误是由Marcin上面所述的partialpartialLoop视图助手的默认行为引起的。 虽然混淆手动做解释这种here

对象执行的toArray()方法。如果传递一个对象并且具有一个 toArray()方法,则toArray()的结果将作为视图变量分配给 视图对象。

解决方法是明确告诉部分传递对象。正如手册说明:

// Tell partial to pass objects as 'model' variable 
$view->partial()->setObjectKey('model'); 
// Tell partial to pass objects from partialLoop as 'model' variable 
// in final partial view script: 
$view->partialLoop()->setObjectKey('model'); 

传递 Zend_Db_Table_Rowsets到partialLoop()时,这种技术特别有用,因为你再有完全访问 到视图脚本中的行对象,让你打电话 方法在其上(例如从父级或从属行中检索值)。