【问题标题】:Validation Group on "NotBlank" constraint makes field have "required" attribute when not used“NotBlank”约束的验证组使字段在不使用时具有“必需”属性
【发布时间】:2023-04-03 17:36:01
【问题描述】:

我有一个实体字段如下:

/**
 * @ORM\Column(nullable=true)
 * @Assert\NotBlank(groups={"myGroup"})
 */
protected $field;

然后我调用一个没有任何验证组的实体表单(我的configureOptions 函数只设置data_class)。但是该字段是使用 HTML 中的 required="required" 属性创建的:

<input id="entity_field" name="entity[field]" required="required" type="text">

但如果我修改 HTML 并取出 required="required",验证将在后端按预期工作(即,NotBlank 不适用于此表单)。

【问题讨论】:

    标签: html symfony validation symfony-forms symfony-2.8


    【解决方案1】:

    注解@Assert\NotBlank(groups={"myGroup"}) 与服务器端相关,输入属性required="required" 在表单的构造中定义。 如果不需要此字段,则应在表单中将 required 选项定义为 false,请查看文档 here 和 here

    必选选项

    最常见的选项是 required 选项,可以应用于任何字段。默认情况下, required 选项设置为 true,这意味着如果该字段留空,支持 HTML5 的浏览器将应用客户端验证。如果您不希望出现这种情况,请禁用 HTML5 验证或将字段上的 required 选项设置为 false:

    另请注意,将 required 选项设置为 true 不会导致应用服务器端验证。换句话说,如果用户为该字段提交了一个空白值(例如,使用旧浏览器或 Web 服务),它将被接受为有效值,除非您使用 Symfony 的 NotBlank 或 NotNull 验证约束。

    换句话说,必需的选项是“nice”,但应该始终使用真正的服务器端验证。

    【讨论】:

    • 但是如果我把@Assert\NotBlank 去掉,required 属性就会消失。换句话说,框架中的某些内容会读取NotBlank 并在表单中添加required="required"。当我在正确的验证组中时,它不应该很聪明并且只阅读NotBlank 吗?这是一个错误吗?
    • @Heitor :据我所知,symfony 中的服务器端验证和客户端验证之间没有关系
    • 服务器端和客户端可能会分别验证,但是当您设置某些“@Assert”约束时,它们在两者中都起作用。尝试在字段中设置 NotBlank,您将在 HTML 中自动获得 required="required"。尝试设置Length 约束,你会得到maxlength="X"。当然,我假设 Symfony 标准版的默认行为。
    猜你喜欢
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2021-07-20
    相关资源
    最近更新 更多