Symfony2验证可选字段

fko*_*ler 2 php forms validation symfony symfony-2.0

在我的表单中,我有一个必填项设置为false的字段,此字段是可选的.

但是,当使用该字段时,我希望在此字段上进行notBlank验证:

@Assert\NotBlank(
 *     message="The name field can't be blank",
 *     groups={"flow_poemDataCollector_step1"}
 * )
Run Code Online (Sandbox Code Playgroud)

现在,我无法使用验证约束NotBlank,因为当字段未使用时,它将导致我的表单验证失败.

我尝试在onPostBindRequest监听器中的字段中添加随机值,但它很复杂,并且无法使其工作.我不确定这是不是正确的方法.

这是我试过的:( $ form是一个Symfony\Component\Form\FormInterface对象)

    $form = $event->getForm();
    $formData = $form->getData();
    $formData->setUserName("foo");
    $form = $form->setData($formData);
Run Code Online (Sandbox Code Playgroud)

但后来我得到一个错误,我不能在未绑定的表单上调用isValid().

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

小智 7

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


Cha*_*ste 7

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

@Assert\Optional(
    @Assert\NotBlank(
        message="The name field can't be blank",
        groups={"flow_poemDataCollector_step1"}
    )
)
Run Code Online (Sandbox Code Playgroud)

参考:http://symfony.com/doc/2.7/reference/constraints/Collection.html

  • “可选”约束似乎仅适用于“集合”,并且不能用于单个字段 - 例如,如果您有一个可选字段,但必须是电子邮件(如果存在),则“可选`似乎没有用。 (2认同)