在我的表单中,我有一个带有所需选项设置为false的字段,此字段是可选的。
但是,当使用该字段时,我想在此字段上进行notBlank验证:
@AssertNotBlank(
* message="The name field can't be blank",
* groups={"flow_poemDataCollector_step1"}
* )
现在,我无法使用验证约束notBlank,因为它会导致我的表单验证未使用时失败。
我尝试在OnPostBindRequest侦听器中的字段中添加随机值,但它很复杂,没有设法使其正常工作。我不确定这是不正确的方法。
这是我尝试的:($ form是Symfony Component component form forminterface对象)
$form = $event->getForm();
$formData = $form->getData();
$formData->setUserName("foo");
$form = $form->setData($formData);
,但随后我得到一个错误,我无法在未绑定的形式上调用Isvalid()。
我该如何实现目标?IE。仅在某些情况下验证字段。
这是一个古老的问题,但似乎现在我们可以这样做:
@AssertOptional(
@AssertNotBlank(
message="The name field can't be blank",
groups={"flow_poemDataCollector_step1"}
)
)
参考:http://symfony.com/doc/2.7/reference/constraints/collection.html
我可以看到的最佳方法是在您的实体上使用回调验证器。由于此回调是在您的实体中定义的,因此它可以访问所有属性。通过ExecutionContext,您可以根据需要设置违规行为。
hmm。我不得不多次重读您的问题,因为其中的某些内容在逻辑上无效。
如果您不需要该字段,则使用NotBlank
约束是没有道理的。如何同时不需要和需要一个字段?
如果您想要的只是在该字段中输入某些内容不仅仅由空格组成,那么您根本不需要NotBlank
约束,因为Symfony默认情况下将用户输入缩小,因此它将最终成为如果什么都没输入。
如果您希望该字段是可选的,则可以:
new AssertLength(array('min' => 0))
因为从约束中省略字段将导致意外的场错误。
最终在这里搜索如何同时完成一个字段,如果输入(如可选的电子邮件):
:来自Symfony文档:
与大多数其他约束一样,空字符串和空字符串是被认为有效的值。这是为了使它们成为可选的值。如果该值是强制性的,那么一个常见的解决方案是结合起来用notblank的约束。
https://symfony.com/doc/current/referent/constraints/email.html
因此,该解决方案仅为Email
,并且该字段仍然是可选的。