Symfony:LoggingTranslator 与翻译器

Symfony: LoggingTranslator vs Translator

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

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...

两者有什么区别?

根据news announcement,从2.6版本开始,翻译器组件被定义为类似translator.default的服务。

所以更改您的服务定义:

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

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

Symfony 2.6 引入了缺失的翻译记录,为此 "translator" 服务别名被某种真正翻译器的代理所取代 class。

正如在另一个(目前已接受的)答案中所说,真正的翻译器 class 现在在 "translator.default" 服务上。但是使用此服务而不是 "translator" 将禁用此新的 Symfony 功能,因此您可能希望避免这种情况。

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

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