我想将我的翻译字符串注入服务,所以我在服务定义中使用了这个:
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...
两者有什么区别?
答案 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)