带有 EntityManagerInterface 的 Symfony 4.1 自定义验证器不工作

Symfony 4.1 custom validator with EntityManagerInterface not working

我想验证 $form->isValid() 之外的一些变量,但我收到以下错误消息:

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

控制器:

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);
    }
}

包含测试:

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

包含测试验证器:

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 */
    }
}

有人知道如何初始化 EntityManagerInterface 吗?

解决了。我有同样的问题。 这是一个提示 https://github.com/symfony/symfony/issues/27760 但是你的 TestController 在构造函数中注入 Symfony\Component\Validator\Validator\ValidatorInterface 真正需要的是什么。 之后使用此接口而不是 Validation::createValidator(); 应该是这样的:

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);
    }
}