【问题标题】:Symfony2 - Custom validator and dependancy injectionSymfony2 - 自定义验证器和依赖注入
【发布时间】:2013-07-14 07:54:26
【问题描述】:

我正在尝试对自定义验证器使用依赖注入,以便能够使用 entityManager。

我遵循了 Symfony 示例:Dependency Injection,但我总是收到此错误消息:

FatalErrorException: 错误: 类 'isdoi' 未在 /home/milos/workspace/merrin3/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Validator/ConstraintValidatorFactory.php 第 68 行

这是我的课程:

1. IsDOI 类:

    <?php
    namespace Merrin\MainBundle\Validator\Constraints;
    use Symfony\Component\Validator\Constraint;

    /**
     * @Annotation
    */
    class IsDOI extends Constraint
    {
    public $message_publisher_DOI = 'The Publisher DOI abbreviation does not correspond to the DOI you filled in !';
    public $message_journal_DOI = 'No journal found with the DOI you filled in !';
    public $journal;
    public $doiAbbreviation;

     public function validatedBy() {
            return "isdoi";
        }

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

2。 IsDOIValidator 类:

<?php

namespace Merrin\MainBundle\Validator\Constraints;

use Doctrine\ORM\EntityManager;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
use Symfony\Component\DependencyInjection\ContainerBuilder;

class IsDOIValidator extends ConstraintValidator
{
    private $entityManager;

    public function __construct(EntityManager $entityManager)
    {
    $this->entityManager = $entityManager;
    }

    public function validate($value, Constraint $constraint)
    {       
        $em_mdpipub = $this->entityManager('mdpipub');
        //Do some tests here...

    }
}

3.服务:

merrin.main.validator.isdoi:
    class:  Merrin\MainBundle\Validator\Constraints\IsDOIValidator
    arguments: 
        entityManager: "@doctrine.orm.entity_manager"

我哪里错了?感谢您的帮助。

【问题讨论】:

    标签: php symfony dependency-injection customvalidator


    【解决方案1】:

    你有错误的服务文件,当你添加标签和别名时,你可以使用“isdoi”名称

    merrin.main.validator.isdoi:
        class:  Merrin\MainBundle\Validator\Constraints\IsDOIValidator
        arguments: 
            entityManager: "@doctrine.orm.entity_manager"
        tags:
            - { name: validator.constraint_validator, alias: isdoi }
    

    【讨论】:

      【解决方案2】:

      你告诉 Symfony2 你的约束的验证器类是isdoi (validateBy method)。但是,您的验证器是 IsDOIValidator

      你必须使用:

      public function validateBy()
      {
          return "IsDOIValidator";
      }
      

      然而,如果你的 Constraint 类名是 IsDOI,Symfony 会自动寻找 IsDOIValidator 作为 ConstraintValidatorvalidateBy 的默认行为是将“Validator”附加到约束名称,并查找具有此名称的类。所以如果你不超载validateBy,Symfony2会自动搜索IsDOIValidator

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-30
        • 1970-01-01
        相关资源
        最近更新 更多