UnexpectedTypeException при попытке создать пользовательское ограничение проверки

Я пытаюсь создать пользовательское ограничение проверки, это соответствующий код:

ValidCoupon.php

<?php
namespace Bcg\UtilsBundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;/**
* @Annotation
*/
class ValidCoupon extends Constraint
{
public function validatedBy()
{
return 'valid_coupon';
}
public $message = 'The coupon is not valid.';
}

class ValidCouponValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
var_dump($value);
if (true) {
$this->context->addViolation(
$constraint->message,
array()
);
}
}
}

Я называю сервис в config.yml так:

services:
validator.unique.valid_coupon:
class: Bcg\UtilsBundle\Validator\Constraints\ValidCoupon
tags:
- { name: validator.constraint_validator, alias: valid_coupon }

Validation.yml выглядит так:

Bcg\UtilsBundle\Entity\Order:
properties:
coupon:
- Bcg\UtilsBundle\Validator\Constraints\ValidCoupon: ~

И ошибка, которую я получаю, заключается в следующем:

Ожидаемый аргумент типа
«Symfony \ Component \ Validator \ ConstraintValidatorInterface»,
«Bcg \ UtilsBundle \ Validator \ Constraints \ ValidCoupon» задано 500 внутренних
Ошибка сервера — UnexpectedTypeException

Трассировка полного стека Вот.

Я застрял, кажется, не нашел ValidCouponValidator Я действительно не знаю, как продолжить отсюда, я знаю, что общественная функция validateBy() выполняется, поэтому он должен быть корректно переопределен, но это не так …

1

Решение

Похоже, у вас есть тип в конфигурации службы валидатора:

Вы объявляете свой класс ValidCoupon как валидатор вместо вашего ValidCouponValidator (который действительно реализует ConstraintValidatorInterface, так как ошибка вызывает жалобы).

Попробуй это:

services:
validator.unique.valid_coupon:
class: Bcg\UtilsBundle\Validator\Constraints\ValidCouponValidator
tags:
- { name: validator.constraint_validator, alias: valid_coupon }
5

Другие решения

Других решений пока нет …