Html 验证小组对;“不空白”;约束使字段具有;“必需”;不使用时的属性
我有一个实体字段,如下所示:Html 验证小组对;“不空白”;约束使字段具有;“必需”;不使用时的属性,html,symfony,validation,symfony-forms,symfony-2.8,Html,Symfony,Validation,Symfony Forms,Symfony 2.8,我有一个实体字段,如下所示: /** * @ORM\Column(nullable=true) * @Assert\NotBlank(groups={"myGroup"}) */ protected $field; 然后我调用一个没有任何验证组的实体表单(我的configureOptions函数只设置data\u类)。但该字段是使用HTML中的required=“required”属性创建的: <input id="entity_field" name="entity[field]
/**
* @ORM\Column(nullable=true)
* @Assert\NotBlank(groups={"myGroup"})
*/
protected $field;
然后我调用一个没有任何验证组的实体表单(我的configureOptions
函数只设置data\u类
)。但该字段是使用HTML中的required=“required”
属性创建的:
<input id="entity_field" name="entity[field]" required="required" type="text">
但是,如果我摆弄HTML并取出
required=“required”
,验证将在后端按预期工作(即NotBlank
不适用于此表单)。注释@Assert\NotBlank(groups={“myGroup”})
与服务器端相关,输入属性required=“required”
在表单的构造中定义。
如果此字段不是必需的,您应该在表单中将必需选项定义为false,请查看文档并
所需选项
最常见的选项是必填选项,可应用于任何字段。默认情况下,required选项设置为true,这意味着如果字段留空,支持HTML5的浏览器将应用客户端验证。如果不希望出现这种行为,请禁用HTML5验证或将字段上的必需选项设置为false:
还要注意,将required选项设置为true不会导致应用服务器端验证。换句话说,如果用户提交字段的空白值(例如,使用旧浏览器或web服务),则该值将被接受为有效值,除非您使用Symfony的NotBlank或NotNull验证约束
换句话说,所需的选项是“nice”,但应始终使用真正的服务器端验证
但是如果我将
@Assert\NotBlank
取出,则required
属性将消失。换句话说,框架中的某些内容读取NotBlank
,并在表单中插入required=“required”
。当我在正确的验证组时,它不应该聪明地只阅读NotBlank
?这是一个bug吗?@Heitor:据我所知,symfonyth中的服务器端验证和客户端验证之间没有任何关系。服务器端和客户端可能分别进行验证,但当您设置某些“@Assert”约束时,它们在这两种情况下都起作用。尝试在字段中设置NotBlank
,您将在HTML中自动获得required=“required”
。尝试设置Length
约束,您将得到maxlength=“X”
。当然,我假设Symfony标准版默认行为。