Пользовательский валидатор Symfony 4.1 с EntityManagerInterface не работает - PullRequest
0 голосов
/ 24 октября 2018

Я хочу проверить некоторую переменную вне $ form-> isValid (), но я получаю следующее сообщение об ошибке:

Слишком мало аргументов для функции App \ Validator \ Constraints \ ContainsTestValidator ::__construct (), 0 передано в **** \ vendor \ symfony \ validator \ ConstraintValidatorFactory.php в строке 43 и ожидается ровно 1

Контроллер:

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

кто-нибудь знает, как инициализировать EntityManagerInterface?

1 Ответ

0 голосов
/ 24 октября 2018

Решил это.У меня такая же проблема.Вот подсказка https://github.com/symfony/symfony/issues/27760 Но что вам действительно нужно для вашего TestController inject 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...