Symfony 4.1 custom validator with EntityManagerInterface not working

Viewed 1183

I want to validate some variable outside of the $form->isValid() but i get the following error message:

Too few arguments to function App\Validator\Constraints\ContainsTestValidator::__construct(), 0 passed in ****\vendor\symfony\validator\ConstraintValidatorFactory.php on line 43 and exactly 1 expected

Controller:

class TestController extends AbstractController
{
    public function validate(Request $request)
    {
        $string= $request->request->get('data');

        $validator = Validation::createValidator();
        $constraint = new Assert\ContainsTest();
        $violations = $validator->validate($string, $constraint);
    }
}

ContainsTest :

class ContainsTest extends Constraint
{
    public $message = '"{{ string }}" is not valid.';
}

ContainsTestValidator:

class ContainsTestValidator extends ConstraintValidator
{
    private $entityManager;
    /**
     * @param EntityManager $entityManager
     */
    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->entityManager = $entityManager;
    }

    public function validate($value, Constraint $constraint)
    {
        /* some code */
    }
}

has anyone an idea how to initialization the EntityManagerInterface ?

1 Answers

Solved it. I had the same problem. Here is a hint https://github.com/symfony/symfony/issues/27760 But what is you really need for your TestController inject Symfony\Component\Validator\Validator\ValidatorInterface in constructor. After that use this interface instead of Validation::createValidator(); Here how it should be:

class TestController extends AbstractController
{
    private $validator;
    public function __construct( ValidatorInterface $validator)
    {
        $this->validator = $validator;
    }

    public function validate(Request $request)
    {
        $string= $request->request->get('data');

        $validator = $this->validator;
        $constraint = new Assert\ContainsTest();
        $violations = $validator->validate($string, $constraint);
    }
}
Related