Symfony Admin生成器 - 显示Doctrine Collection

时间:2012-06-11 10:21:31

标签: php symfony1 symfony-1.4

在我的模特中我有:

 * @method Doctrine_Collection getComments() Returns the current record's "Comments" collection

默认如果我生成了管理员,那么这不会显示在列表中。 如果是在generator.yml:

config:
  actions: ~
  fields:  ~
  list:    
    display: [id, title, comments]
  filter:  ~
  form:    ~
  edit:    ~
  new:     ~

然后这个告诉我

<pre> Doctrine_Collection data : Array( ) </pre>

而不是评论列表。

我知道 - 我可以从缓存中获取文件并显示此信息,但这可能仅适用于 generator.yml ? 例如,如果我有一对多的关系,那么这显示了我的名字。

我不想为此使用缓存! 谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用函数解决问题。

例如,在我的generator.yml

  list:    
    display: [id, description, public, nbQuestions]

nbQuestions是Object.class.php

中的一个函数
public function getNbQuestions() {
    return $this->getQuestion()->count();
}

管理生成器将自动调用对象类中的“getYouField”方法。因此,您可以描述一个为您的学说集合返回长字符串的函数。

答案 1 :(得分:1)

除了显示计数之外,还有另外一种方法。

您可以在generator.yml中添加部分:

  list:
    display: [id, description, public, _comments]

然后在你的部分(_comments.php)中,你可以调用关系并显示你想要的东西(添加样式,其他信息等等):

<?php
  // note that you will need to change the $object
  echo $object->getComments()->count();
?>

另一方面,在编辑视图中列出所有注释可能很有用。在你的generator.yml:

  form:
    # don't forget to add others fields
    display: [_comments]

然后在你的部分:

<ul>
  <?php foreach($form->getObject()->getComments() as $comment): ?>
    <li><?php echo $comment->getBody() ?></li>
  <?php endforeach; ?>
</ul>

如果你想将两者合并在一起(不要忘记重命名$object):

<?php if(isset($form)): ?>

  <ul>
    <?php foreach($form->getObject()->getComments() as $comment): ?>
      <li><?php echo $comment->getBody() ?></li>
    <?php endforeach; ?>
  </ul>

<?php elseif(isset($object)): ?>

  <?php
    // note that you will need to change the $object
    echo $object->getComments()->count();
  ?>

<?php endif; ?>