簡體   English   中英

Symfony定制驗證器即服務

[英]Symfony custom validator as service

嘗試遵循官方docs中的自定義驗證器即服務示例。 我已經在“ services.yml”中將驗證器定義為服務:

cf.validator.unique.in.system:
            class: 'CF\AppBundle\Validator\Constraints\UniqueInSystemValidator'
            arguments: ['@doctrine']
            tags:
                - { name: 'validator.constraint_validator', alias: 'cf.validator.unique.in.system' }

我創建了必要的約束和驗證器類:

約束

namespace CF\AppBundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;

/**
 * @Annotation
 */
class UniqueInSystem extends Constraint
{
    public $message = 'This value is already used.';

    public function getTargets()
    {
        return self::CLASS_CONSTRAINT;
    }

    public function validatedBy()
    {
        return 'cf.validator.unique.in.system';
    }
}

驗證器

namespace CF\AppBundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
use Doctrine\Bundle\DoctrineBundle\Registry as Doctrine;

/**
 * @Annotation
 */
class UniqueInSystemValidator extends ConstraintValidator
{
    protected  $em;

    public  function  __construct(Doctrine $doctrine)
    {
        $this->em = $doctrine->getManager();
    }
    public function validate($subsystem, Constraint $constraint)
    {

        1==1; // here is a breakpoint by now
//        $this->context->addViolationAt('[expiresAt].expiresAt', $constraint->message, ['%string%' => $value->format('Y-m-d')] );
    }

我不明白的是我得到的錯誤消息: FatalErrorException: Error: Class '\\Symfony\\Component\\Validator\\Constraints\\CF\\AppBundle\\Validators\\Constraints\\UniqueInSystem' not found in /var/www/escritorio.dev/application/vendor/symfony/symfony/src/Symfony/Component/Validator/Mapping/Loader/AbstractLoader.php line 89

特別是這部分: '\\Symfony\\Component\\Validator\\Constraints\\CF\\AppBundle\\Validators\\Constraints\\UniqueInSystem' 為什么symfony嘗試在這個奇怪的名稱空間中搜索? 如何避免這個問題?

UPD

驗證器本身通過/src/CF/AppBundle/Resources/config/validation.yml應用:

CF\AppBundle\Entity\SubSystem:
  constraints:
      - CF\AppBundle\Validators\Constraints\UniqueInSystem: ~
  properties:
    name:
      - NotBlank: ~
      - Length:
          max: 100
    owner:
      - NotBlank: ~
    leader:
      - NotBlank: ~
    system:
      - NotBlank: ~
    status:
      - NotBlank : ~
      - Type:
          type: integer

app/console container:debug輸出:

$ php app/console container:debug  | grep CF
auc_helper                                         container CF\AppBundle\Services\AucHelper
cf.validator.unique.in.system                      container CF\AppBundle\Validator\Constraints\UniqueInSystemValidator
// This
CF\AppBundle\Entity\SubSystem:
  constraints:
    - CF\AppBundle\Validators\Constraints\UniqueInSystem: ~

// Should be
CF\AppBundle\Entity\SubSystem:
  constraints:
    - CF\AppBundle\Validator\Constraints\UniqueInSystem: ~

為什么Constraints目錄不稱為Constraint,一直是一個謎。 但是Validator一直被稱為Validator。

暫無
暫無

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

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