是否可以为所有 Symfony FormType 设置默认值?
我们目前正在开发基于 Symfony (3.3) 的 API 后端。在前端,我们将实体作为对象,如下所示:
{"id": 1, "username": "foo" ..... }
如果我们想更新实体,我们可以对对象进行 JSON.stringfy 并将其发送到服务器。
但是如果我们通过
$form->submit($request)
将请求绑定到我们的实体
我们收到错误(“此表单不应包含额外字段。”),因为我们在 FormType 中没有(并且不想使用!)“id”。
所以我们必须在每个 FormType 中将
allow_extra_fields
设置为 true
public function setDefaultOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(['allow_extra_fields' => true]);
}
有没有办法将其配置为所有 FormType 的默认值(无需扩展自定义 FormType 或类似的内容)?
您可以创建表单类型扩展,将此默认值更改为所有表单类型的
true
。
表单类型扩展非常强大:它们允许您修改整个系统中任何现有的表单字段类型。
class MyFormTypeExtension extends AbstractTypeExtension
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'allow_extra_fields' => true,
));
}
public static function getExtendedTypes(): iterable
{
return [FormType::class];
}
}
请参阅官方文档了解有关如何注册类型扩展的更多信息。
注意:
allow_extra_fields
选项在 FormTypeValidatorExtension
中定义,因此请确保在其之后注册您的自定义类型扩展以覆盖默认值,否则使用 priority
标签属性来确保它。