我正在尝试创建自定义验证约束,这是相关代码:
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 \分量\验证\ ConstraintValidatorInterface” 给出500内部的“Bcg \ UtilsBundle \ Validator \ Constraints \ ValidCoupon” 服务器错误 - UnexpectedTypeException
完整堆栈跟踪here。
我很卡住,似乎找不到ValidCouponValidator
我真的不知道如何从这里继续,我知道公共函数validateBy()
已被执行,所以应该被正确覆盖,但似乎不是这样......
答案 0 :(得分:5)
好像你的验证器服务配置中有一个类型:
您将ValidCoupon类声明为验证器而不是ValidCouponValidator(确实在错误抱怨时实现了ConstraintValidatorInterface)。
试试这个:
services:
validator.unique.valid_coupon:
class: Bcg\UtilsBundle\Validator\Constraints\ValidCouponValidator
tags:
- { name: validator.constraint_validator, alias: valid_coupon }