У меня есть объект с данными поля массива (массив доктрины). Я хочу создать форму 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
)
Поскольку нет встроенного типа данных, вы должны добавить свой собственный. Этого достаточно, чтобы расширить простое текстовое поле (TextType) с помощью DataTransformer, который может преобразовать массив <-> json.
Предположим, ваш пользовательский тип будет 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')
Дополнительные сведения см. В разделе Как создать тип поля пользовательской формы