Symfony - 从源代码中删除所需的属性时没有 form_error

Symfony - Don't have form_error when removing required attr from source code

我刚刚在我的 symfony 项目中注意到,如果我有一个具有 不可空字段 的实体,并且在 formType 中我确保该字段 是必需的.

因此在页面呈现中,如果我执行 "inspect the element" 并手动 从字段中删除 "required" 属性 ,那么 我可以验证,在这种情况下,我会遇到理论错误,而不是停留在带有简单验证错误的表单页面上

SQLSTATE[23000]: Integrity constraint violation: 1048 Le champ 'titre' ne peut être vide (null)

但是,我在我的 Twig 文件中使用 {{form_row(form.field)}},所以我也应该有 form_error

这是否意味着对于我所有的实体,我必须每次都添加 @Assert\NotNull 以避免这个问题?就算不自动管理也显得牵强

如果您需要服务器端验证,使用 @Assert\NotNull 注释确实是正确的方法。

或者,如果您不想触及您的实体,您可以在表单类型中添加约束:

'required' => true,
'constraints' => new Assert\NotNull(),

现在,如果您真的想要将原则类型自动映射到 Symfony 验证中,请阅读以下文章: https://symfony.com/blog/new-in-symfony-4-3-automatic-validation

该功能存在一些问题,导致 Symfony 团队默认禁用它。解决方案是取消注释 config/packages/validator.yaml 中的以下行:

        #auto_mapping:
        #    App\Entity\: []

Symfony 4.4 还附带了两个新注释(@Assert\EnableAutoMapping@Assert\DisableAutoMapping),允许您在 per-class/field 基础上 enable/disable 该功能