Symfony2-条令实体数组字段和表单


Symfony2 - Doctrine Entity array field and forms

假设我有一个Post实体,它有$title字段(数组类型),我想允许用户用多种语言编写帖子的标题

/**
 * Post
 *
 * @ORM'Table(name="posts")
 * @ORM'Entity
 */
class Post
{
    /**
     * @var integer
     *
     * @ORM'Column(name="id", type="integer")
     * @ORM'Id
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @var array
     *
     * @ORM'Column(name="title", type="array", nullable=true)
     */
    protected $title;
}

当用户想要提交新帖子时,我如何创建生成这些字段的表单类型?

<input type="text" name="title[en]" />
<input type="text" name="title[fr]" />

您必须为表单创建一个子类型:

class TitleType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
            $builder
                    ->add('en')
                    ->add('fr');
    }
    public function getName()
    {
            return 'form_type';
    }
}

然后你可以在你的主类型中添加这个子类型:

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
            $builder
                    ->add('title', new TitleType());
    }