2011-05-19 43 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()時,這種技術特別有用,因爲你再有完全訪問 到視圖腳本中的行對象,讓你打電話 方法在其上(例如從父級或從屬行中檢索值)。