Php EntityManager不工作的Symfony2自定义验证程序

Php EntityManager不工作的Symfony2自定义验证程序,php,validation,symfony,doctrine-orm,Php,Validation,Symfony,Doctrine Orm,我正在尝试构建一个验证器,它将根据数据库检查一些值。为此,我需要在服务中注入entityManager,并为我的验证方法提供一个别名,如Symfony官方文档中所述 问题是,在按照书中的所有内容进行操作之后,我仍然收到一个错误,即entityManager为null: 可捕获的致命错误:参数1传递给XXX\CommonBundle\Validator\Constraints\IsSingleEntryValidator::\uu构造必须是Doctrine\ORM\EntityManager的实例

我正在尝试构建一个验证器,它将根据数据库检查一些值。为此,我需要在服务中注入entityManager,并为我的验证方法提供一个别名,如Symfony官方文档中所述

问题是,在按照书中的所有内容进行操作之后,我仍然收到一个错误,即entityManager为null:

可捕获的致命错误:参数1传递给XXX\CommonBundle\Validator\Constraints\IsSingleEntryValidator::\uu构造必须是Doctrine\ORM\EntityManager的实例,未给定,在第71行的/var/www/XXX/vendor/symfony/symfony/src/symfony/Bundle/FrameworkBundle/Validator/ConstraintValidatorFactory.php中调用并定义

我的服务:

XXX.validators.is_single_entry:
    class: XXX\CommonBundle\Validator\Constraints\IsSingleEntryValidator
    arguments:
        - "@doctrine.orm.default_entity_manager"
    tags:
        - { name: validator.constraint_validator, alias: single_entry_validation }
和验证程序类:

class IsSingleEntryValidator extends ConstraintValidator
{

    /**
     * @var EntityManager
     */
    protected $em;

    /**
     * Constructor
     *
     * @param EntityManager $em
     */
    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }

    public function validate($value, Constraint $constraint)
    {
        ...
    }

    public function validateBy()
    {
        return 'single_entry_validation';
    }
}
以及验证程序的使用:

/**
 * @ORM\Column(name="is_primary", type="boolean", nullable=true)
 * @SiteAssert\IsSingleEntry(message="validator.single.entry")
 */
protected $isPrimary;

@Ragdata-条令.orm.default\u实体\u管理器条令\orm\EntityManager

我的代码中实际上有两个错误

validatedBy函数的调用

此函数应在IsSingleEntry类内调用,而不是在IsSingleEntryValidator内调用

方法名称应不同

我调用了validateBy方法,但是正确的函数名应该是validateBy

所以代码现在应该是这样的:

IsSingleEntry

IsSingleEntryValidator


我的EntityManager依赖项称为@doctor.orm.entity\u manager。。。在控制台上运行container:debug命令,并确保您的命令名为doctor.orm.default\u entity\u manager。如果这不是问题所在,我和你一样被卡住了——否则看起来很完美。你是否尝试过清除缓存并重新启动php?
class IsSingleEntry extends Constraint
{
    public $message = "The value already exists in the database";

    /**
     * @return string
     */
    public function validatedBy()
    {
        return 'single_entry_validation';
    }
}
class IsSingleEntryValidator extends ConstraintValidator
{

    /**
     * @var EntityManager
     */
    protected $em;

    /**
     * Construct
     *
     * @param EntityManager $em
     */
    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }

    /**
     * Validate
     *
     * @param mixed $value
     * @param Constraint $constraint
     */
    public function validate($value, Constraint $constraint)
    {
        $oActiveExists = $this->em->getRepository('DatabaseBundle:Languages')->findOneByIsPrimary(true);

        if ($oActiveExists) {
            $this->context->buildViolation($constraint->message)
                ->addViolation();
        }
    }
}