我无法设置附加了DataTransformer的表单字段的默认值。
我们以official documentation on DataTransformers:
为例class TaskType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('description', TextareaType::class)
->add('issue', TextType::class)
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Task::class,
));
}
在示例中,ModelTransformer被添加到'问题'字段,在呈现表单时将Issue对象转换为字符串(问题编号),并在表单提交时将其转换回Issue。
现在我通过构建器选项设置问题字段的默认值:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$issue = $options['issue']; //$issue contains an Issue Object from the controller
$builder
->add('description', TextareaType::class)
->add('issue', TextType::class, array(
'data' => $issue
))
;
}
渲染表单时出现以下错误:
表单的视图数据应该是AppBundle / Entity / Issue类的实例,但是是(n)字符串。您可以通过设置" data_class"来避免此错误。 null的选项或添加视图转换器,将(n)字符串转换为AppBundle / Entity / Issue的实例。
我真的不明白这个错误,希望你能帮忙!
答案 0 :(得分:0)
IssueSelectorType
(TextType
的子)期望字符串作为初始值并且内部的数据转换器将其转换为问题实例,因此您需要传递问题ID。
但是,data
选项始终不起默认值:
表单字段的默认值直接取自底层数据结构。数据选项会覆盖此默认值(Doc.)
有关详细信息,请参阅此答案:How to set a default value in a Symfony 2 form field?