Symfony2验证可选字段



在我的表单中,我有一个带有所需选项设置为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,并且该字段仍然是可选的。

相关内容

  • 没有找到相关文章

最新更新