2015-10-17 35 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 } 

我用這個在我的代碼和它的工作;)