Ну что ж, сам нашел решение после нескольких экспериментов.
Я оставлю этот вопрос без ответа на пару дней, так как можно выложить лучшее решение , чтобыло бы очень кстати:)
В частности, я нашел избыточную сумму new FormError
, не знаю, есть ли лучший способ добавить ошибку в форму.И, честно говоря, не знаю, почему new Form\CallbackValidator
работает, а new CallbackValidator
- нет.
Итак, не забудьте добавить use
операторы, подобные этим:
use Symfony\Component\Form as Form, // Mendatory
Symfony\Component\Form\FormInterface,
Symfony\Component\Validator\Constraints\MinLength,
Symfony\Component\Validator\Constraints\MinLengthValidator;
И обратный вызов:
$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;
};
Ну, и это та часть, которую я не могу понять (почему я вынужден использовать префикс Form
), но это нормально:
$builder->get('password')->addValidator(new Form\CallbackValidator($validation));