Php Symfony2表单未验证必填字段

Php Symfony2表单未验证必填字段,php,forms,validation,symfony,Php,Forms,Validation,Symfony,我有一个Symfony2表单,它有必填字段,在大多数浏览器中都可以正常工作,因为输入上有“required”属性,因此用户在不填写字段的情况下无法提交表单 但是,对于不支持“required”属性的浏览器,将提交表单。这导致了一个问题,因为当调用表单的isValid()函数时,即使必填字段为空,它也会返回true 这是正常的行为吗?我假设在表单的handleRequest函数中会有一些服务器端对必填字段的检查,但它似乎没有。如果没有,是否有办法启用此功能?您需要手动检查这些内容,或者需要在实体中

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

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


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

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

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

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

// src/AppBundle/Entity/Author.php

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

class Author
{
    /**
     * @Assert\NotBlank()
     */
    public $name;
}
有了这个约束,您就告诉Symfony,
name
字段不能为空。因此,如果提交的字段为空,则表单验证将失败


永远不要信任客户端验证,因为这些验证可以很容易地修改和失效

记住,任何人都可以输入DOM并删除所需的属性,这就是为什么不应该单独依赖它。向表单元素添加约束以确保它存在。例如,
Symfony\Component\Validator\Constraints\NotBlank
谢谢,这很有效。我假设表单对象将在前端和后端执行验证(特别是在调用isValid时),在两个不同的位置定义相同的验证似乎有点愚蠢。如果表单只执行前端验证,那么它是非常无用的,因为您不能依赖它,必须重新检查后端的所有内容。但是我不能抱怨,因为它现在正在工作:)
required
字段只是表单的
视图
的一个选项,而不是表单后面的数据。这就是为什么这只影响视图,而不影响服务器端验证。正如我所知,建议不要再使用
Assert
注释(尽管官方文档鼓励这样做)。修复方法是导入相应的验证类(如
NotBlank
),然后只导入属性名称上方的
/***@NotBlank()*/
。不过没什么大不了的,我想…@DanCostinel谢谢你提供的信息,我还不知道。有关更多信息,请参阅。