自定义验证器不会调用@service_container

时间:2014-11-06 13:44:21

标签: php symfony service customvalidator

Symfony版本:2.5

错误

  

"可捕获的致命错误:传递给Intermedius \ UserBundle \ Validator \ Constraints \ RegisteredEmailValidator :: __ construct()的参数1必须实现接口Symfony \ Component \ DependencyInjection \ ContainerInterface,没有给定,在D:\ Projektek中调用第71行的pricing_tool \ backend \ vendor \ symfony \ symfony \ src \ Symfony \ Bundle \ FrameworkBundle \ Validator \ ConstraintValidatorFactory.php,在D:\ Projektek \ pricing_tool \ backend \ src \ Intermedius \ UserBundle \ Validator \ Constraints \ RegisteredEmailValidator中定义。 php line 22"

RegisteredEmail.php

 class RegisteredEmail extends Constraint
 {
    public $message = "MSG";
 }

RegistereEmailValidator.php

class RegisteredEmailValidator extends ConstraintValidator{
    public $containerInterface;

     function __construct(ContainerInterface $containerInterface)
     {
          $this->containerInterface = $containerInterface;
     }


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

        if (!$constraint instanceof RegisteredEmail) {
           throw new UnexpectedTypeException($constraint, __NAMESPACE__ . '\RegisteredEmail');
     }

   }



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

services.yml

services:
  intermedius.user.validator.registered_email:
    class: Intermedius\UserBundle\Validator\Constraints\RegisteredEmail
    arguments: [ @service_container ]
    tags:
        - { name: validator.constraint_validator, alias: registered_email }

2 个答案:

答案 0 :(得分:0)

验证器服务定义的类应设置为验证器类,而不是约束。

class: Intermedius\UserBundle\Validator\Constraints\RegisteredEmailValidator

答案 1 :(得分:0)

您不应在服务中注入service_container。在您的示例中,您应该只注入您需要的服务。例如,请参阅http://symfony.com/doc/current/components/dependency_injection.html中的“避免代码依赖于容器”部分。