为所有 Symfony 表单类型设置默认值
Set defaults for all Symfony Form Types
是否可以为所有 Symfony FormTypes 设置默认值?
我们目前正在开发基于 Symfony (3.3) 的 API 后端。在前端,我们将实体作为对象,如下所示:{"id": 1, "username": "foo" ..... }
如果我们想要更新实体,我们 JSON.stringfy 对象并将其发送到服务器。
但是如果我们通过 $form->submit($request)
将请求绑定到我们的实体
我们得到一个错误 ("This form should not contain extra fields.") 因为我们没有(也不想使用!)"id" in out FormTypes.
所以我们必须在每个 FormType
中将 allow_extra_fields
设置为 true
public function setDefaultOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(['allow_extra_fields' => true]);
}
有没有办法将其配置为所有 FormType 的默认值(无需扩展自定义 FormType 或类似的东西)?
您可以创建表单类型扩展,将所有表单类型的默认值更改为 true
。
Form type extensions are incredibly powerful: they allow you to modify any existing form field types across the entire system.
class MyFormTypeExtension extends AbstractTypeExtension
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'allow_extra_fields' => true,
));
}
public function getExtendedType()
{
return 'Symfony\Component\Form\Extension\Core\Type\FormType';
}
}
在 Official documentation 中查看有关如何注册类型扩展的更多信息。
注意: allow_extra_fields
选项在 FormTypeValidatorExtension
中定义,因此请确保您的自定义类型扩展在它之后注册以覆盖默认值,否则使用 priority
标记属性来确保它。
是否可以为所有 Symfony FormTypes 设置默认值?
我们目前正在开发基于 Symfony (3.3) 的 API 后端。在前端,我们将实体作为对象,如下所示:{"id": 1, "username": "foo" ..... }
如果我们想要更新实体,我们 JSON.stringfy 对象并将其发送到服务器。
但是如果我们通过 $form->submit($request)
将请求绑定到我们的实体
我们得到一个错误 ("This form should not contain extra fields.") 因为我们没有(也不想使用!)"id" in out FormTypes.
所以我们必须在每个 FormType
中将allow_extra_fields
设置为 true
public function setDefaultOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(['allow_extra_fields' => true]);
}
有没有办法将其配置为所有 FormType 的默认值(无需扩展自定义 FormType 或类似的东西)?
您可以创建表单类型扩展,将所有表单类型的默认值更改为 true
。
Form type extensions are incredibly powerful: they allow you to modify any existing form field types across the entire system.
class MyFormTypeExtension extends AbstractTypeExtension
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'allow_extra_fields' => true,
));
}
public function getExtendedType()
{
return 'Symfony\Component\Form\Extension\Core\Type\FormType';
}
}
在 Official documentation 中查看有关如何注册类型扩展的更多信息。
注意: allow_extra_fields
选项在 FormTypeValidatorExtension
中定义,因此请确保您的自定义类型扩展在它之后注册以覆盖默认值,否则使用 priority
标记属性来确保它。