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

Custom form field type in Symfony

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

所以,问题是: 有什么方法可以在 Symfony 中使用自定义类型作为表单字段吗?

这是表单域:

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

这是表单类型:

 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
    )

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

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

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