2

在我的表单中,我有一个必填选项设置为 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()。

我怎样才能实现我的目标?IE。仅在某些情况下验证字段。

4

5 回答 5

9

这是一个老问题,但现在我们似乎可以这样做:

@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

于 2016-08-28T10:00:48.933 回答
7

我能看到实现这一目标的最佳方法是在您的实体上使用回调验证器。由于此回调是在您的实体中定义的,因此它可以访问所有属性。通过 ExecutionContext,您可以根据需要设置违规。

于 2012-10-30T09:25:42.727 回答
0

唔。我不得不多次重读您的问题,因为其中的某些内容在逻辑上无效。

如果您希望该字段不是必需的,那么使用NotBlank约束是没有意义的。一个字段怎么可能不是必填项和必填项?

如果你想要的是,如果在该字段中输入的内容不只包含空格,那么你根本不需要NotBlank约束,因为 Symfony 默认会修剪用户输入,所以它最终会好像什么都没有完全进入。

于 2012-10-30T09:35:30.090 回答
0

如果您希望该字段是可选的,您可以:

new Assert\Length(array('min' => 0))

因为从约束中省略字段将导致意外字段错误。

于 2016-11-10T07:07:37.267 回答
0

最后在这里搜索如何使一个字段成为可选字段,如果输入,则验证,如可选电子邮件:

来自 symfony 文档:

与大多数其他约束一样,null 和空字符串被视为有效值。这是为了让它们成为可选值。如果该值是强制性的,一个常见的解决方案是将此约束与 NotBlank 结合起来。

https://symfony.com/doc/current/reference/constraints/Email.html

所以解决方案只是验证 asEmail并且该字段仍然是可选的。

于 2021-04-19T15:23:19.183 回答