【问题标题】:Set defaults for all Symfony Form Types为所有 Symfony 表单类型设置默认值
【发布时间】:2018-03-28 02:51:03
【问题描述】:

是否可以为所有 Symfony FormTypes 设置默认值?

我们目前正在开发基于 Symfony (3.3) 的 API 后端。在前端,我们将实体作为对象,如下所示:{"id": 1, "username": "foo" ..... }

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

但是如果我们通过$form->submit($request)将请求绑定到我们的实体 我们得到一个错误(“这个表单不应该包含额外的字段。”)因为我们在表单类型中没有(也不想使用!)“id”。

所以我们必须在每个 FormType 中将 allow_extra_fields 设置为 true

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

有没有办法将其配置为所有 FormTypes 的默认值(无需扩展自定义 FormType 或类似的东西)?

【问题讨论】:

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

标签: symfony default symfony-forms


【解决方案1】:

您可以创建一个表单类型扩展,将所有表单类型的默认值更改为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 标签属性确保它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 2018-06-29
    • 1970-01-01
    • 2013-12-11
    • 2012-01-19
    相关资源
    最近更新 更多