Skip to content
Advertisement

Symfony2 Validating an optional field

In my form, I have a field with required option set to false, this field is optional.

However, I would like to have a notBlank validation on this field when the field is used:

@AssertNotBlank(
 *     message="The name field can't be blank",
 *     groups={"flow_poemDataCollector_step1"}
 * )

Right now, I can’t use the validation constraint NotBlank because it will cause my form validation to fail when the field is unused.

I tried something to add a random value in the field in a onPostBindRequest listener, but it is complex and didn’t manage to have it working. I’m not sure that it is the right way to proceed neither.

Here is what I tried: ($form is a SymfonyComponentFormFormInterface object)

    $form = $event->getForm();
    $formData = $form->getData();
    $formData->setUserName("foo");
    $form = $form->setData($formData);

But then I get an error that I can’t call isValid() on an unbound form.

How can I achieve my goal? ie. Validating the field only in some case.

Advertisement

Answer

The best way I can see to achieve this is to use a Callback validator on your entity. As this callback is defined in your entity, it has access to all properties. Through the ExecutionContext you can then set violations as needed.

User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement