【问题标题】:Symfony2 form not validating required fieldsSymfony2 表单未验证必填字段
【发布时间】:2017-06-24 15:40:18
【问题描述】:

我有一个包含必填字段的 Symfony2 表单,它在大多数浏览器中都可以正常工作,因为“必填”属性在输入中,因此用户无法在不填写字段的情况下提交表单。

但是,对于不支持“required”属性的浏览器,表单会被提交。这会导致问题,因为当调用表单的 isValid() 函数时,即使必填字段为空,它也会返回 true。

这是正常行为吗?我假设在表单的 handleRequest 函数期间会有一些服务器端检查必填字段,但它似乎没有。如果没有,有没有办法启用它?

【问题讨论】:

  • 请记住,任何人都可以检查 DOM 并删除所需的属性,这就是为什么您不应该单独依赖它的原因。向表单元素添加约束以确保它存在。例如。 Symfony\Component\Validator\Constraints\NotBlank

标签: php forms validation symfony


【解决方案1】:

您要么需要手动检查这些内容,要么需要在实体中定义validation constraints,以启用自动验证。

如果 Symfony 现在不检查什么,它可以进行验证。

这是上面链接的文档中的一个示例。

// src/AppBundle/Entity/Author.php

// ...
use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    /**
     * @Assert\NotBlank()
     */
    public $name;
}

有了这个约束,你告诉 Symfony,name 字段不能为空。所以如果该字段将提交为空,表单验证将失败。

永远不要相信客户端验证,因为它们很容易被修改和失效

【讨论】:

  • 谢谢,成功了。我会假设 Form 对象会在前端和后端执行验证(尤其是在调用 isValid 时),在两个不同的地方定义相同的验证似乎有点愚蠢。如果表单只执行前端验证,那么它就没什么用了,因为您不能依赖它并且必须重新检查后端的所有内容。但我不能抱怨,因为它现在正在工作:)
  • required 字段只是表单的view 的一个选项,但不适用于表单后面的数据。这就是为什么这只影响视图,而不影响服务器端验证。
  • 据我所知,建议不要再使用Assert 注释(尽管官方文档鼓励这样做)。修复方法是导入相应的验证类(如NotBlank),然后在属性名称上方仅导入/** *@NotBlank() */。不过,我想这没什么大不了的……
  • @DanCostinel 谢谢你提供的信息,我还不知道。
  • np。请参阅this presentation 了解更多信息。
猜你喜欢
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 2017-08-23
  • 2014-03-07
  • 2020-10-15
相关资源
最近更新 更多