Symfony中的自定义表单字段类型

时间:2015-01-08 18:32:29

标签: php arrays symfony doctrine-orm

我有一个带有数组字段数据(doctrine数组)的实体。我想为这个实体创建一个symfony表单,我想在其中包含这个字段。

所以,问题是: 有没有办法在Symfony中使用自定义类型作为表单字段?

这是表单字段:

/**
 * @var array
 *
 * @ORM\Column(name="dates", type="array")
 */
private $dates;

这是formType:

 public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('dates') // i want to use ->add('dates','array') but type 'array' is not allowed
        ;
    }

这是我要保存的数据:

$dates = array(
        'birthday' => \DateTime('1995'),
        'wedding' => \DateTime('2001'),
        // and so on
    )

1 个答案:

答案 0 :(得分:1)

如果没有内置数据类型,您应该添加自定义数据类型。使用DataTransformer扩展简单文本字段(TextType)就足够了,它可以进行数组< - > json转换。

我们假设您的自定义类型为YourBundle\Form\Type\JSONArrayType。要在表单中将其用作常规字段,您应该在bundle config中注册:

json_array_type.service:
class: YourBundle\Form\Type\JSONArrayType
tags:
  - { name: form.type, alias: json_array_type }

然后您可以在表单类型$builder->add('dates', 'json_array_type')

中使用它

有关详细信息,请参阅How to Create a Custom Form Field Type