Zend Предаване на променлива към PartialLoop в частичен изглед

По мое мнение имам частичен, съдържащ partialLoop. Но когато стартирам страницата, имам следното съобщение за грешка:

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

Ето как наричам своя частичен от моя поглед:

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

където $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!

В bootstrap съм задал:

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

Това ли е правилният начин за извикване на partialLoops от partials??

P.s. var_dumped $this->object вътре в моя частичен и той е PostRow OBJECT.I var изхвърли $this->object в _loop.phtml и имам 5 NULLS (за id,title,text ,автор,полета за дата и час на публикацията ми)

Благодаря

Лука


person luca    schedule 19.05.2011    source източник
comment
Какво е това: echo $post->countComments();. Това не трябва ли да е echo $post->object->countComments();?   -  person user594791    schedule 19.05.2011


Отговори (2)


Мисля, че причината е, че когато прехвърлите $this->post в помощник за частичен изглед по следния начин:

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

помощникът за частичен изглед ще изпълни своя toArray() метод. Следователно вашият $this->object е масив и вие предавате масив на вашия partialLoop. И така, във вашия partialLoop вие се опитвате да изпълните countComments() върху масив, представляващ вашия обект за публикуване на ред, а не действителен обект за ред.

За да избегнете това, бих препоръчал предаване на променливи към помощници за изглед partial и partialLoop, използвайки нотация на масив, напр.:

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

Надявам се това да помогне.

person Marcin    schedule 19.05.2011
comment
Аз var_dumped $this-›object: вътре partial е PostRow Object.Inside partialLoop е NULL. Разчитайки на вашия отговор, не трябва ли да виждам масив??благодаря - person luca; 19.05.2011
comment
Всъщност вътре в частичния цикъл var_dump($this-›object) извежда 5 NULLS (мисля, че означават id,title,text,author,datetime полета на реда ми с публикации) - person luca; 19.05.2011
comment
Реших, благодаря, но все още съм объркан относно това, което всъщност направих, като предадох променливите, използвайки нотация на масив. Всяко допълнително обяснение ще бъде наистина оценено! - person luca; 19.05.2011
comment
@лука. И така, как го решихте? За съжаление нямам повече улики каква би била причината за първоначалния проблем. - person Marcin; 19.05.2011

Тази грешка е причинена от поведението по подразбиране на помощниците за изглед partial и partialLoop, както Марчин каза по-горе. Въпреки че е объркващо, ръководството обяснява това тук

Обект, изпълняващ метода toArray(). Ако даден обект е предаден и има метод toArray(), резултатите от toArray() ще бъдат присвоени на обекта на изгледа като променливи на изгледа.

Решението е изрично да кажете на partial да предаде обекта. Както ръководството обяснява:

// 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(), тъй като след това имате пълен достъп до вашите обекти на редове в рамките на скриптовете за преглед, което ви позволява да извиквате методи за тях (като извличане на стойности от родителски или зависими редове).

person Teddy Ort    schedule 12.01.2012