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 Internal Server Error — UnexpectedTypeException

Полная трассировка стека здесь.

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


person Trufa    schedule 15.10.2014    source источник


Ответы (1)


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

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

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

services:
    validator.unique.valid_coupon:
        class: Bcg\UtilsBundle\Validator\Constraints\ValidCouponValidator
        tags:
            - { name: validator.constraint_validator, alias: valid_coupon }
person Snroki    schedule 15.10.2014
comment
Спасибо, я пробовал это, но комбинация другой ошибки помешала мне заметить, правильное ли это решение, спасибо! Я буду тестировать немного больше, но это кажется правильным. - person Trufa; 15.10.2014