我有一个表单类型(field_type),它扩展了文本并具有 data_class 。通过事件监听器将实体实例传递给表单会导致 LogicException :
表单的视图数据应该是类Entity的一个实例, 但是是一个(n)字符串。您可以通过设置来避免此错误 " data_class" null选项或添加视图转换器 将(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 ,则可以正常工作。
为什么我需要删除此部分?