尝试创建自定义验证约束时出现UnexpectedTypeException

Tru*_*ufa 1 php forms validation custom-validators symfony

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

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()
            );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在config.yml中调用这样的服务:

services:
    validator.unique.valid_coupon:
        class: Bcg\UtilsBundle\Validator\Constraints\ValidCoupon
        tags:
            - { name: validator.constraint_validator, alias: valid_coupon }
Run Code Online (Sandbox Code Playgroud)

validation.yml看起来像这样:

Bcg\UtilsBundle\Entity\Order:
    properties:
        coupon:
            - Bcg\UtilsBundle\Validator\Constraints\ValidCoupon: ~
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:

给出500内部服务器错误的类型为"Symfony\Component\Validator\ConstraintValidatorInterface","Bcg\UtilsBundle\Validator\Constraints\ValidCoupon"的预期参数--UnexpectedTypeException

全堆栈跟踪这里.

我很困难,它似乎没有发现ValidCouponValidator我真的不知道如何从这里继续,我知道公共函数validateBy()被执行,所以它应该被正确覆盖,但它似乎不是这样......

Snr*_*oki 5

好像你的验证器服务配置中有一个类型:

您声明您ValidCoupon类作为验证的,而不是你的ValidCouponValidator(这的确实现了ConstraintValidatorInterface作为错误抱怨).

试试这个:

services:
    validator.unique.valid_coupon:
        class: Bcg\UtilsBundle\Validator\Constraints\ValidCouponValidator
        tags:
            - { name: validator.constraint_validator, alias: valid_coupon }
Run Code Online (Sandbox Code Playgroud)