カスタム検証制約を作成しようとしています。これは関連するコードです:
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 内部サーバー エラー - UnexpectedTypeException を指定されました
ここに完全なスタック トレースがあります。
私はかなり立ち往生していValidCouponValidator
ます。ここから続行する方法が本当にわからないようです。パブリック関数validateBy()
が実行されていることはわかっているので、正しくオーバーライドする必要がありますが、そうではないようです...