Question

I have a simple form, which contains two fields, the first field is just a select and the second field contains a value, which needs to be checked with the help of the first field.

I have found a similar question Symfony2 form validation based on two fields and tried to use the Callback validator.
I have read the documentation, but I can't figure out how I can use it with access to the database.

It seems that the only way is to call the validation method statically, but in this case I loose the context of my controller. I need it to access for example the database.
In this relation I am using Silex and want to access services provided by it.

The form isn't mapped to any class, so the creation of an own constraint looks wrong for me, because I don't see any way to pass the other fields to the validator.

Is there any way to achieve it?

Or do I need another approach?

Was it helpful?

Solution

I strongly advise you to map the form to a class and create a custom constraint...

I have written a detailed example on how to:

  • create your own validation constraint
  • turn it into a service
  • inject the object-manager
  • access the database from the constraint

TLDR:

What you need is a custom validator on class level.

A class-level validator is needed because you need to access the whole object (not only a single property) if you want validate multiple related values...

... or need to fetch something from database using another property as select-criteria.

Here's the the complete answer with example.


Another option could be creating a form-event listener and passing the object-manager to it before adding it to the form.

Then take care of the validation-process (checking the data against the database + eventually adding errors to the form) inside the listener yourself.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top