繁体   English   中英

Symfony表单CollectionType字段

[英]Symfony form CollectionType Field

嗨,我是Symfony 2的新手。到目前为止,我已经处理了几个小时的问题,因此我不得不问社区问题。

我有两个实体

用户->语言(OneToMany)

用户实体

/**
 * 
 * @ORM\OneToMany(targetEntity="User_Language", mappedBy="user")
 */
private $languages;

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

User_Language实体

/** @ORM\Column(type="string", length=50) */
private $language;

/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="languages")
 */
private $user;

User_LanguageTyp

public function buildForm(FormBuilderInterface $builder, array $options) {

    $builder
        ->add( 'language' );
}

我正在尝试建立一个表单,用户可以在其中添加/编辑/删除他的口语

数据库中的用户语言

用户语言

当从数据库(在控制器中)获取数据时,使用$ user-> GetLanguages(),我获得了persistantCollection,使用QueryBuilder(),我得到了一个数组

有什么办法,如何将其传递给CreateForm()函数?

$form = $this->createForm( User_LanguageType::class, $user->getLanguages() );

我得到了这两个错误:

The form's view data is expected to be an instance of class ArpanetRuzicja7EstatesBundle\Entity\User_Language, but is an instance of class Doctrine\ORM\PersistentCollection.

要么

The form's view data is expected to be an instance of class ArpanetRuzicja7EstatesBundle\Entity\User_Language, but is a(n) array. You can avoid this error by setting the "data_class" option to null or by adding a view transformer that transforms a(n) array to an instance of ArpanetRuzicja7EstatesBundle\Entity\User_Language.

设置'data_class' => null并没有帮助。

非常感谢。

如果要允许用户添加/删除任意数量的语言,则必须使用集合类型字段。 http://symfony.com/doc/2.7/reference/forms/types/collection.html

在这里使用它: http : //symfony.com/doc/2.7/form/form_collections.html

您为用户实体创建一个表单,在您的User_languageType上添加集合字段类型,并且您必须添加一些JavaScript来管理添加和删除语言。

我没有写所有示例,symfony文档已经非常适合:)

但我假设您已经有一个Form / userType,可以添加collection字段:

->add('tags', 'collection', [
        'type'         => New User_LanguageType(),
        'allow_add'    => true,
        'allow_delete' => true,
    ]);

(对于symfony3)

->add('tags', 'collection', [
        'type'         => User_LanguageType::class,
        'allow_add'    => true,
        'allow_delete' => true,
    ]);

数组短语法[]需要php5.4分钟,如果不使用array()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM