Zend:在partialLoop中使用Row模型方法

时间:2011-05-16 16:10:53

标签: zend-framework loops model partial-views

Zend talk。我有一个名为“article”的视图,里面有一个partialLoop,用于显示该帖子的DB中的所有注释:

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

这是_comments.phtml:

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

由于注释DB表的结构是:

id(PK) | text | datetime | authorId

我想从_comments.phtml中使用CommentRow的方法从“authors”数据库表中检索作者姓名。

这是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()方法显示注释的作者名称?

感谢 卢卡

2 个答案:

答案 0 :(得分:2)

Partial View Helper希望您传入键/值结构。这可以是关联数组或对象。如果传入一个对象,则将考虑任何公共属性,除非该对象具有toArray方法,返回具有所需键和值的关联数组。传递给帮助程序的键和值将在部分中可用。这意味着您的Zend_Db_Rowset不再存在于部分中。请阅读以下如何正确传递它。

引用Reference Guide for the Partial View Helper

  

如果您的模型是一个对象,您可能希望将它作为对象传递给部分脚本,而不是将其序列化为变量数组。您可以通过设置相应帮助程序的“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()时特别有用,因为您可以在视图脚本中完全访问行对象,从而允许您在它们上调用方法(例如从中检索值)父或从属行)。

答案 1 :(得分:0)

foreach($this->comments as $comment) {
 echo $comment->getAuthor()->nickname;  // output nickname column of author for example
}

有关详细示例,请参阅Zend_Db_Table_Rowset