为所有 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 标记属性来确保它。