2
我要創建一個多語種的表,所以我選擇了這個模式:Symfony的2個嵌入表單的ArrayCollection錯誤
Article (id, name_translation_fk)
Translation (id)
Translation_Text (id, language, translation_fk, text)
現在我需要添加不同語言的名稱爲媒體鏈接存在的文章。 學說給我此錯誤:
捕致命錯誤:傳遞給學說\共同\類別\ ArrayCollection的:: __構建體(參數1)必須給定一個數組,對象,稱爲* /供應商/教義/ LIB /教義/ ORM /上線416 UnitOfWork.php和* /供應商/學說-common/lib目錄/教義/通用/收藏/ ArrayCollection.php線定義的46
我不知道是什麼問題可能是因爲所有的實體都被很好地聲明瞭。我認爲這個問題是在Form類中的某個地方。
我在下面發佈了我的實體,表單和視圖。
文章
class Article
{
/**
* @ORM\ManyToOne(targetEntity="Translation", inversedBy="article_name", cascade= {"persist"})
* @ORM\JoinColumn(name ="name", referencedColumnName="id")
*/
protected $name;
}
翻譯
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
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;
}
形式
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';
}
}
控制器
$article = $em->getRepository('Udo\WebserviceBundle\Entity\Article')->find($id);
$form = $this->createForm(new ArticleTranslationForm(),$article);
表單視圖
<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>
好吧,我不都拿到實體。你想要做的是文章m:n Translation_Text,這是正確的嗎?你想通過翻譯課程來完成嗎?那麼,Translation_Text中與語言的關係是什麼意思呢? – Sgoettschkes