Symfony:LoggingTranslator与Translator

时间:2015-03-20 08:31:50

标签: php symfony symfony-2.6

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

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

两者有什么区别?

2 个答案:

答案 0 :(得分:11)

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

因此,请更改您的服务定义:

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

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

答案 1 :(得分:7)

Symfony 2.6引入了缺失的翻译记录,为此,“翻译器”服务别名被真实翻译类的某种代理所取代。

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

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

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