在我的表单中,我有一个必填项设置为false的字段,此字段是可选的。
但是,我希望在使用该字段时对此字段进行notBlank验证:
@Assert\NotBlank(
* message="The name field can't be blank",
* groups={"flow_poemDataCollector_step1"}
* )
现在,我无法使用验证约束NotBlank,因为当字段未使用时,它会导致我的表单验证失败。
我尝试在onPostBindRequest侦听器中的字段中添加随机值,但它很复杂,并且无法使其工作。我不确定这是不正确的方法。
这是我尝试过的:( $ form是一个Symfony \ Component \ Form \ FormInterface对象)
$form = $event->getForm();
$formData = $form->getData();
$formData->setUserName("foo");
$form = $form->setData($formData);
然后我收到一个错误,我无法在未绑定的表单上调用isValid()。
我如何实现目标?即。仅在某些情况下验证字段。
答案 0 :(得分:7)
我能看到实现此目的的最佳方法是在您的实体上使用Callback validator。由于此回调是在您的实体中定义的,因此它可以访问所有属性。通过ExecutionContext,您可以根据需要设置违规。
答案 1 :(得分:6)
这是一个老问题,但似乎现在我们可以这样做:
@Assert\Optional(
@Assert\NotBlank(
message="The name field can't be blank",
groups={"flow_poemDataCollector_step1"}
)
)
参考:http://symfony.com/doc/2.7/reference/constraints/Collection.html
答案 2 :(得分:0)
嗯。我不得不多次重读您的问题,因为其中的某些内容在逻辑上无效。
如果您不想要该字段,那么使用NotBlank
约束是没有意义的。如何在同一时间不需要和要求某个领域?
如果您想要的是,如果在该字段中输入的内容并不仅仅包含空格,那么您根本不需要NotBlank
约束,因为Symfony会修改用户输入默认,所以它最终会好像什么都没有输入一样。
答案 3 :(得分:0)
如果您希望该字段是可选字段,您可以:
new Assert\Length(array('min' => 0))
因为从约束中省略字段会导致意外的字段错误。
答案 4 :(得分:0)
最后在这里搜索如何使字段既可选又验证(如果输入),如可选电子邮件:
来自 symfony 文档:
<块引用>与大多数其他约束一样,空字符串和空字符串是 视为有效值。这是为了让它们成为可选值。 如果该值是强制性的,一个常见的解决方案是结合这个 使用 NotBlank 进行约束。
https://symfony.com/doc/current/reference/constraints/Email.html
所以解决方案只是验证为 Email
并且该字段仍然是可选的。