8

我想将我的翻译字符串注入到服务中,所以我在服务定义中使用了它:

arguments: [@doctrine.orm.entity_manager, @translator]

我在构造函数中使用了它:

public function __construct(\Doctrine\ORM\EntityManager $entityManager, \Symfony\Component\Translation\Translator $translator)

但我得到这个错误:

.... __construct() must be an instance of Symfony\Component\Translation\Translator, instance of Symfony\Component\Translation\LoggingTranslator given...

两者有什么区别?

4

2 回答 2

13

根据新闻公告,从 2.6 版本开始,翻译器组件被定义为类似服务translator.default

所以改变你的服务定义:

arguments: [@doctrine.orm.entity_manager, @translator]

arguments: [@doctrine.orm.entity_manager, @translator.default]
于 2015-03-20T09:51:08.300 回答
8

Symfony 2.6 引入了缺失翻译日志,为此“翻译器”服务别名被某种代理替换为真正的翻译器类。

正如在另一个(并且目前接受的)答案中所说,真正的翻译类现在在“translator.default”服务上。但是使用这个服务而不是“翻译器”会禁用这个新的 Symfony 特性,所以你可能想避免这种情况。

要解决您的问题并仍然可以访问新功能,请更改构造函数的代码以接受 TranslatorInterface 的任何实现:

public function __construct(\Doctrine\ORM\EntityManager $entityManager, \Symfony\Component\Translation\TranslatorInterface $translator)
于 2015-12-17T11:54:44.110 回答