尝试创建自定义验证约束时出现意外的TypeException


UnexpectedTypeException when trying to create a custom validation constraint

我正在尝试创建一个自定义验证约束,这是相关的代码:

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''Constation''ValidCoupon"给定500内部服务器错误-意外类型异常

此处为完整堆栈跟踪。

我很困,它似乎找不到ValidCouponValidator。我真的不知道如何从这里继续,我知道公共函数validateBy()已经执行,所以它应该被正确地重写,但它似乎不是这样…

您的验证器服务配置中似乎有一个类型:

您将ValidatCoupon类声明为验证器,而不是ValidatCouponValidator(它确实实现了错误所抱怨的ConstraintValidatorInterface)。

试试这个:

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