我正在尝试创建一个自定义验证约束,这是相关的代码:
ValidCoupon.php
<?php
namespace BcgUtilsBundleValidatorConstraints;
use SymfonyComponentValidatorConstraint;
use SymfonyComponentValidatorConstraintValidator;
/**
* @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: BcgUtilsBundleValidatorConstraintsValidCoupon
tags:
- { name: validator.constraint_validator, alias: valid_coupon }
validation.yml如下所示:
BcgUtilsBundleEntityOrder:
properties:
coupon:
- BcgUtilsBundleValidatorConstraintsValidCoupon: ~
我得到的错误如下:
应为类型的参数"Symfony\Component\Validator\ConstraintValidatorInterface","Bcg\UtilsBundle\Validator\Constation\ValidCoupon"给定500内部服务器错误-意外类型异常
此处为完整堆栈跟踪。
我很困,它似乎找不到ValidCouponValidator
。我真的不知道如何从这里继续,我知道公共函数validateBy()
已经执行,所以它应该被正确地重写,但它似乎不是这样…
您的验证器服务配置中似乎有一个类型:
您将ValidatCoupon类声明为验证器,而不是ValidatCouponValidator(它确实实现了错误所抱怨的ConstraintValidatorInterface)。
试试这个:
services:
validator.unique.valid_coupon:
class: BcgUtilsBundleValidatorConstraintsValidCouponValidator
tags:
- { name: validator.constraint_validator, alias: valid_coupon }