2017-10-16 202 views
2

是否可以为所有Symfony表单类型设置默认值?为所有Symfony表单类型设置默认值

我们目前正在基于Symfony(3.3)开发API后端。在前端,我们有我们的实体作为对象看起来像:{"id": 1, "username": "foo" ..... }

如果我们想更新实体,我们JSON.stringfy对象,并将其发送到服务器。

但是,如果我们通过$form->submit($request) 绑定请求到我们的实体,我们得到一个错误(“这种形式不应包含额外的字段。”),因为我们没有(和不想使用!) “id”输出FormTypes。

所以我们必须设置allow_extra_fieldstrue在每一个FormType

public function setDefaultOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(['allow_extra_fields' => true]); 
} 

是否有此配置为所有FormTypes默认的方式(不扩展的自定义FormType或类似这样的东西)?

+0

你是如何在实体中定义id属性的? (在其注释中)。 –

回答

3

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

表单类型扩展功能非常强大:它们允许您在整个系统中修改任何现有的表单字段类型。

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

+0

thx,那正是我一直在寻找的! – Fabian