2015-03-20 12 views
7

chcę wstrzykiwać moje tłumaczenia ciąg do służby, więc użyłem tego w definicji usługi:Symfony: LoggingTranslator vs Tłumacz

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

Kiedyś to w konstruktorze:

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

Ale Otrzymuję ten błąd:

.... __construct() must be an instance of Symfony\Component\Translation\Translator, instance of Symfony\Component\Translation\LoggingTranslator given... 

Jaka jest różnica między tymi dwoma?

+0

Proszę rozważyć ten [dokumentacja] (http://symfony.com/blog/new-in-symfony-2-6-ulepszenia-do-tłumaczenia-komponentu) – falinsky

+1

spróbuj wstrzyknąć tę usługę: 'translator.default' – Matteo

+0

Dzięki. translator.default działa :) – b85411

Odpowiedz

11

Zgodnie z news announcement, od wersji 2.6 komponent tłumaczący jest zdefiniowany jako usługa taka jak translator.default.

więc zmienić definicję usługi:

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

z

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

Witam @ b85411, jeśli ta lub jakakolwiek odpowiedź rozwiązała Twoje pytanie, rozważ [akceptuj to] (http://meta.stackexchange.com/q/5234/179419), klikając znacznik wyboru. Wskazuje to szerszej społeczności, że znalazłeś rozwiązanie i dajesz reputację zarówno autorowi, jak i sobie. Nie ma obowiązku tego robić. – Matteo

+1

Przyjąłem tę odpowiedź. – b85411

7

Symfony 2.6 wprowadzono brakujące tłumaczenia zalogowaniu a do tego alias "translator" usługa została zastąpiona przez jakiegoś pełnomocnika do prawdziwa klasa tłumacza.

Jak wspomniano w drugiej (i obecnie akceptowanej) odpowiedzi, prawdziwa klasa tłumacza znajduje się teraz w usłudze "translator.default" "translator.default". Ale użycie tej usługi zamiast "tłumacz" spowoduje wyłączenie tej nowej funkcji Symfony, więc możesz tego uniknąć.

Aby rozwiązać swój problem i nadal mieć dostęp do nowych funkcji, zmień kod konstruktora przyjąć każdą realizację TranslatorInterface:

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

To jest lepsza odpowiedź. Powiedziałbym, aby zawsze używać '@ translator' (nigdy wariantu .default) i włączać/wyłączać rejestrowanie, jak tego chcesz. Następnie użyj '\ Symfony \ Component \ Translation \ TranslatorInterface', aby wpisać tekst w usługach. –