尝试嵌入表单集合时出现Symfony2异常

时间:2013-04-15 13:31:42

标签: php forms symfony doctrine

this question的延续:

我正在尝试嵌入官方文档here中所述的一组表单。不幸的是,我得到以下例外:

  

表单的视图数据应该是Acme \ SiteBundle \ Entity \ BlogPost类的实例,但是是(n)数组。您可以通过将“data_class”选项设置为null或添加将(n)数组转换为Acme \ SiteBundle \ Entity \ BlogPost实例的视图转换器来避免此错误。

这很奇怪,因为我相信我遵循官方文档到't':

BlogPostType:

class BlogPostType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        // static text fields/attrs (title, body, etc)
        $builder->add('comments', 'collection', array('type' => new CommentType()));
    }

    public function getName()
    {
        return 'blogpost';
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array('data_class' => 'Acme\SiteBundle\Entity\BlogPost'));
    }
}

CommentType:

class CommentType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('commentId', 'hidden');
        $builder->add('commentBody','text',array('label' => 'Comment:','attr'=>array('size'=>80,'class'=>'form-item-input form-type-texfield')));
    }

    public function getName()
    {
        return 'comment';
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array('data_class' => 'Acme\SiteBundle\Entity\Comment'));
    }
}

BlogPost中定义的关系:

/**
 * @var \Acme\SiteBundle\Entity\Comment.php
 *
 * @ORM\OneToMany(targetEntity="Comment", mappedBy="blogpost",
    cascade={"all"},orphanRemoval=true)
 * @ORM\OrderBy({"commentId" = "ASC"})
 */
private $comments;

并在评论中:

/**
 * @var BlogPost
 *
 * @ORM\ManyToOne(targetEntity="BlogPost", inversedBy="comments")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="blog_id", referencedColumnName="id")
 * })
 */
private $blogPost;

所以,我不确定我哪里出错了。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

原来我是一个白痴(那里很大的惊喜)并且正在将表单构建器传递给一个数组。过去工作的旧代码现在正在破坏它。 Whee!