2015-10-17 75 views
8

在symfony的2.3是这条线在service.yml去翻译symfony2.7通过翻译服务容器

在service.yml在serviceFunctions.php

public function __construct(Translator $translator,...) { 
    $this->translator = $translator; 

arguments: [@translator,.... 

现在我得到的错误:

must be an instance of Symfony\Component\Translation\Translator, instance of Symfony\Component\Translation\DataCollectorTranslator given

如何在生产模式下在开发中获得2.7的服务?

+4

可能重复http://stackoverflow.com/questions/291 62346/symfony-loggingtranslator-vs-translator –

+0

下面的答案都不是正确的,请转到重复问题的链接以找到答案 –

+1

在重复问题链接中的答案将与您一样击败调试环境的对象将永远无法使用任何服务的调试版本。只有当您的界面能够保证您拥有正确的方法时,才允许您插入特定的服务是可笑的。你先生,做错了。 – qooplmao

回答

5

尝试使用接口而不是实际的翻译器类。通过使用接口作为类型提示,只要它适合接口,就可以使用任何东西,例如,您可以在开发中传递调试转换程序,而不需要更改代码。

use Symfony\Component\Translation\TranslatorInterface; 

... 

public function __construct(TranslatorInterface $translator) 
{ 
    $this->translator = $translator; 
} 
9

尝试folow中此步骤:

类:

use Symfony\Component\Translation\TranslatorInterface; 

public function __construct(TranslatorInterface $translator) { 
    $this->translator = $translator; 
} 

public function yourFunction(){ 
    $this->translator->trans('key', array(), 'yourDomain'); 
} 

服务:

yourService: 
     class: yourClass 
     arguments: [@translator] 
     tags: 
      - { name : kernel.event_listener, event: kernel.request, method: yourFunction } 

我用这个在我的代码和它的工作;)