【问题标题】:Custom validator not call @service_container自定义验证器不调用 @service_container
【发布时间】:2023-03-10 17:30:01
【问题描述】:

Symfony 版本:2.5

错误

“可捕获的致命错误:传递给 Intermedius\UserBundle\Validator\Constraints\RegisteredEmailValidator::__construct() 的参数 1 必须实现接口 Symfony\Component\DependencyInjection\ContainerInterface,没有给出,在 D:\Projektek\pricing_tool\backend 中调用\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Validator\ConstraintValidatorFactory.php 在第 71 行并在 D:\Projektek\pricing_tool\backend\src\Intermedius\UserBundle\Validator\Constraints\RegisteredEmailValidator.php 第 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 }

【问题讨论】:

    标签: php symfony service customvalidator


    【解决方案1】:

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

    class: Intermedius\UserBundle\Validator\Constraints\RegisteredEmailValidator
    

    【讨论】:

    • RegisteredEmailValidator 类的命名空间是什么?以及为什么需要将验证器与容器紧密结合?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-04
      • 2013-11-15
      • 2013-08-18
      • 2020-10-12
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      相关资源
      最近更新 更多