我有一个表单类型(field_type),它扩展了文本并有一个data_class。通过事件侦听器将实体实例传递给表单会导致LogicException:
表单的视图数据应该是 Entity 类的一个实例,但它是一个 (n) 字符串。您可以通过将“data_class”选项设置为 null 或添加将 a(n) 字符串转换为实体实例的视图转换器来避免此错误。
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('field', 'field_type', $opts);
$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) use($options)
{
...
$form = $event->getForm();
$form->get('field')->setData($entity);
});
}
$entity
是data_class的一个实例。表单类型也有一个视图数据转换器。
字段类型:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addViewTransformer($this->viewTransformer, true);
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Entity',
'invalid_message' => 'The given id is invalid!',
'required' => true
));
}
public function getParent()
{
return 'text';
}
除了data_class的一部分外,一切正常。如果我删除data_class它可以工作。
为什么我需要删除这部分?