我的服务有问题。

 <service id="api.api" class="ApiBundle\Service\ApiService">
        <argument type="service" id="request_stack"/>
        <argument type="service" id="validator"/>
 </service>

__construct 是:
public function __construct(RequestStack $requestStack, RecursiveValidator  $validator)
{
    $this->request = $requestStack->getCurrentRequest();
    $this->validator = $validator;
}

问题是:
  • ENV_DEV,验证器必须是 的实例 TraceableValidator
  • ENV_PROD,验证器必须是 RecursiveValidator
  • 的实例

    你知道我为什么会有这种冲突吗?

    在带有 RecursiveValidator 的 ENV_DEV 中,我有这个错误:
    Type error: Argument 2 passed to
    ApiBundle\Service\ApiService::__construct() must be an instance of
    Symfony\Component\Validator\Validator\RecursiveValidator,
    instance of Symfony\Component\Validator\Validator\TraceableValidator
    given, called in
    var/cache/dev/ContainerLqjid6c/getApi_ApiService.php on line 8
    
    cache:clear 不能解决问题。

    感谢您的帮助。

    最佳答案

    您应该始终(如果可用)提示接口(interface),而不是提示实现。在这种情况下, RecursiveValidator TraceableValidator 都实现了 ValidatorInterface

    所以你的构造函数应该是这样的:

    public function __construct(RequestStack $requestStack, ValidatorInterface  $validator)
    {
        $this->request = $requestStack->getCurrentRequest();
        $this->validator = $validator;
    }
    

    关于php - Symfony 3.4 : RecursiveValidator or TraceableValidator?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48625402/

    10-10 23:56