首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony 2嵌入式表单ArrayCollection错误

Symfony 2嵌入式表单ArrayCollection错误
EN

Stack Overflow用户
提问于 2011-11-01 19:58:06
回答 1查看 4K关注 0票数 2

我必须创建一个多语言表,因此我选择了以下模式:

代码语言:javascript
复制
Article ( id, name_translation_fk)

Translation ( id )

Translation_Text (id, language, translation_fk, text)

现在,我需要为一篇已经存在的文章添加不同语言的名称。教条给了我这个错误:

可捕获的致命错误:传递给Doctrine\Common\Collections\ArrayCollection::__construct()的参数1必须是一个数组,对象给定,在第416行的*/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php中调用,在*/vendor/doctrine-common/lib/Doctrine/Common/Collections/ArrayCollection.php第46行中定义。

我不知道问题出在哪里,因为所有的实体都很清楚,我认为问题就在表单类的某个地方。

我已张贴在下面我的实体,表格和意见牵连。

文章

代码语言:javascript
复制
 class Article
 {

  /**
   * @ORM\ManyToOne(targetEntity="Translation", inversedBy="article_name", cascade=  {"persist"})
   * @ORM\JoinColumn(name ="name", referencedColumnName="id")
   */
  protected $name;
 }

翻译

代码语言:javascript
复制
class Translation
{

    /**
     * @ORM\OneToMany(targetEntity="Translation_Text", mappedBy="translation", cascade={"persist"})
     */
     public $translation_text;

    /**
    * @ORM\OneToMany(targetEntity="Article", mappedBy="name", cascade={"persist"})
    */
    protected $article_name;      

    public function __construct()
    {
        $this->translation_text = new ArrayCollection();
        $this->article_name = new ArrayCollection();
    }
 }

Translation_Text

代码语言:javascript
复制
class Translation_Text
{

/**
 * @ORM\ManyToOne(targetEntity="Language", inversedBy="translation_text")
 * @ORM\JoinColumn(name ="language_id", referencedColumnName="id")
 */
protected $language;

/**
 * @ORM\ManyToOne(targetEntity="Translation", inversedBy="translation_text")
 * @ORM\JoinColumn(name ="translation_id", referencedColumnName="id")
 */
protected $translation;
 }

表单

代码语言:javascript
复制
class TranslationTextType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('text','text');                    
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'Udo\WebserviceBundle\Entity\Translation_Text',
        );
    }

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

}

class TranslationType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {            
        $builder->add('translation_text',new TranslationTextType());
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'Udo\WebserviceBundle\Entity\Translation',
        );
    }

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

}

class ArticleTranslationForm extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('name',new TranslationType());
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'Udo\WebserviceBundle\Entity\Article',
        );
    }

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

控制器

代码语言:javascript
复制
 $article = $em->getRepository('Udo\WebserviceBundle\Entity\Article')->find($id);
 $form = $this->createForm(new ArticleTranslationForm(),$article);

窗体视图

代码语言:javascript
复制
<form action="{{path('article_translate', { 'id': entity.id }) }}" method="post" {{        form_enctype(form) }}>
{{form_row(form.name.translation_text.text)}}
{{form_rest(form)}}
<input type="submit" />
</form>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-04 13:09:07

因为这是一对多的关系,所以您应该使用集合

代码语言:javascript
复制
$builder->add('translation_text', 'collection', array('type' => new TranslationTextType()));

而不是:

代码语言:javascript
复制
$builder->add('translation_text',new TranslationTextType());
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7972134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档