Symfony 使用作为服务公开的验证器的自定义验证约束

Symfony 使用作为服务公开的验证器的自定义验证约束,symfony,Symfony,我有一个自定义验证器作为服务公开(因为它需要其他服务作为依赖项)。我是这样定义的: <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/s

我有一个自定义验证器作为服务公开(因为它需要其他服务作为依赖项)。我是这样定义的:

<?xml version="1.0" encoding="UTF-8" ?>

<container xmlns="http://symfony.com/schema/dic/services"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

   <services>
      <service id="validator.unique.available_email_validator" 
               class="Nourdine\BasicBundle\Validator\Constraints\AvailableEmailValidator">
         <argument type="service" id="signup_manager" />
         <tag name="validator.constraint_validator" alias="available_email_validator" />
      </service>   
   </services>

</container>
事实上,在执行以下操作时,验证程序不会出现在可用服务中:

console container:debug
因此,我怀疑问题在于服务未正确公开。解决了这个问题,我就解决了验证过程中的问题

有人吗?

正如书中所说:

如果找不到您的类,您可能忘记了重命名validatedBy()方法通过别名返回的字符串(在validator类中):


事实上没有!你自己看看:。是吗?好的,你把服务xml代码放在文件Nourdine\BasicBundle\Resources\config\services.xml中了吗?还有,你确定你的app/config/routing.yml中注入了NourdineBasicBundle吗?第一个问题是“是的”。它就在那里,踢!听着:我不知道第二个问题是什么意思:(你解决过这个问题吗?当我把它定义为服务时,我也有同样的问题。
console container:debug
As mentioned above, Symfony2 will automatically look for a class named after the constraint, with Validator appended. If your constraint validator is defined as a service, it's important that you override the validatedBy() method to return the alias used when defining your service, otherwise Symfony2 won't use the constraint validator service, and will instantiate the class instead, without any dependencies injected.
public function validatedBy()
{
    return 'available_email_validator';
}