Zend Передача переменной в PartialLoop внутри частичного представления

У меня есть, на мой взгляд, частичная, содержащая частичную петлю. Но когда я запускаю страницу, у меня появляется следующее сообщение об ошибке:

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

Вот как я называю свою частичку из своего поля зрения:

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

где $this->post - строка, полученная из БД

Это содержание моей части:

MY simplified Partial! 

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

Это содержимое моего partLoop:

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

В начальной загрузке я установил:

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

Это правильный способ вызвать частичные циклы из партиалов??

Ps Я var_dumped объект $ this-> внутри моего партиала, и это PostRow OBJECT.I var сбросил $this->object в _loop.phtml и у меня есть 5 NULL (обозначающих поля id,title,text,author,datetime моего сообщение)

Спасибо

Лука

2 ответа

Решение

Я думаю, что причина в том, что когда вы проходите $this->post в частичном представлении помощник, как это:

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

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

Чтобы избежать этого, я бы порекомендовал передавать переменные в помощники представления частичного и частичного цикла с использованием нотации массива, например:

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

Надеюсь это поможет.

Эта ошибка вызвана поведением по умолчанию partial а также partialLoop рассмотрите помощников, как Марцин сказал выше. Хотя это путает, руководство объясняет это здесь

Объект, реализующий метод 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 в componentLoop (), так как тогда у вас есть полный доступ к вашим объектам строк в сценариях представления, что позволяет вам вызывать методы для них (например, получать значения из родительских или зависимых строк).

Другие вопросы по тегам