我的服务有问题。
<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;
}
问题是:
你知道我为什么会有这种冲突吗?
在带有 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/