为所有 Symfony 表单类型设置默认值

问题描述 投票:0回答:1

是否可以为所有 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 或类似的内容)?

symfony default symfony-forms
1个回答
6
投票

您可以创建表单类型扩展,将此默认值更改为所有表单类型的

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
标签属性来确保它。

© www.soinside.com 2019 - 2024. All rights reserved.