Zend: Использование метода модели Row в частичном цикле - PullRequest
1 голос
/ 16 мая 2011

Zend talk. У меня есть представление под названием "article" с частичным циклом внутри, для отображения всех комментариев в БД для этого сообщения:

[..]
echo $this->partialLoop('_comments.phtml',$this->comments);

это _comments.phtml:

<li><?= $this->text." ".$this->datetime;?></li>

Поскольку структура таблицы БД комментариев:

id(PK) | text | datetime | authorId

Я хотел получить имя автора из таблицы БД "авторы" с помощью метода CommentRow из _comments.phtml.

это модель CommentRow:

class CommentRow extends Zend_Db_Table_Row_Abstract
{
 function getAuthor()
 {
   $author=new Author();
   $q=$author->select('name');
   $q->where('id',$this->authorid);
   $result=$comment->fetchRow($q);
   return $result;  
 }      

}

Как я могу перебирать массив комментариев (которые являются объектом типа CommentRow), переданных в частичный цикл,Вызов метода getAuthor () для отображения имени автора комментария?

спасибо Luca

Ответы [ 2 ]

2 голосов
/ 16 мая 2011

Помощник по частичному виду ожидает, что вы передадите структуру ключ / значение. Это может быть либо ассоциативный массив, либо объект. Если вы передадите объект, любые открытые свойства будут рассмотрены, если только у объекта нет метода toArray, возвращающего ассоциативный массив с нужными ключами и значениями. Ключи и значения, передаваемые помощнику, будут доступны в частичном. Это означает, что ваш Zend_Db_Rowset больше не существует в частичном. Читайте ниже, как правильно пройти.

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

Если ваша модель является объектом, вы можете захотеть, чтобы она передавалась как объект частичному сценарию, а не сериализовалась в массив переменных. Вы можете сделать это, установив свойство 'objectKey' соответствующего помощника:

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

0 голосов
/ 16 мая 2011
foreach($this->comments as $comment) {
 echo $comment->getAuthor()->nickname;  // output nickname column of author for example
}

См. Zend_Db_Table_Rowset для более подробных примеров.

...