带有 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);
}
}
我想验证 $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);
}
}