Well, I found a solution on my own after several experiments.
I will leave this question unanswered for several days, since you can post the best solution , which is really very welcome :)
In particular, I found the redundat parts of the new FormError
, I donโt know if there is a better way to add an error to the form. And to be honest, I donโt know why new Form\CallbackValidator
works, but new CallbackValidator
will not.
So, be sure to add the following use
statements:
use Symfony\Component\Form as Form, // Mendatory Symfony\Component\Form\FormInterface, Symfony\Component\Validator\Constraints\MinLength, Symfony\Component\Validator\Constraints\MinLengthValidator;
And the callback:
$validation = function(FormInterface $form) { // If $data is null then the field was blank, do nothing more if(is_null($data = $form->getData())) return; // Create a new MinLengthValidator $validator = new MinLengthValidator(); // If $data is invalid against the MinLength constraint add the error if(!$validator->isValid($data, new MinLength(array('limit' => 3)))) : $template = $validator->getMessageTemplate(); // Default error msg $parameters = $validator->getMessageParameters(); // Default parameters // Add the error to the form (to the field "password") $form->addError(new Form\FormError($template, $parameters)); endif; };
Well, and this is the part that I cannot understand (why I am forced to prefix with Form
), but this is normal:
$builder->get('password')->addValidator(new Form\CallbackValidator($validation));
source share