簡體   English   中英

嘗試創建自定義驗證約束時出現UnexpectedTypeException

[英]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 }

validate.yml如下所示:

Bcg\UtilsBundle\Entity\Order:
    properties:
        coupon:
            - Bcg\UtilsBundle\Validator\Constraints\ValidCoupon: ~

我得到的錯誤如下:

給定500內部服務器錯誤-類型為“ Symfony \\ Component \\ Validator \\ ConstraintValidatorInterface”,“ Bcg \\ UtilsBundle \\ Validator \\ Constraints \\ ValidCoupon”的預期參數,給出了500內部服務器錯誤-UnexpectedTypeException

完整的堆棧跟蹤在這里

我很困,似乎沒有找到ValidCouponValidator我真的不知道如何從這里繼續,我知道公共函數validateBy()已執行,因此應該正確地重寫它,但似乎沒有所以...

似乎您在驗證程序服務配置中具有類型:

您將ValidCoupon類聲明為驗證器,而不是ValidCouponValidator(由於錯誤所抱怨,它實際上實現了ConstraintValidatorInterface)。

嘗試這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM