2015-03-20 9 views
7

Ich möchte, dass meine Übersetzungen Zeichenfolge in einen Dienst injizieren, so habe ich dies in der Service-Definition:Symfony: LoggingTranslator vs Übersetzer

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

habe ich dies im Konstruktor:

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

Aber Ich bekomme diesen Fehler:

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

Was ist der Unterschied zwischen den beiden?

+0

Bitte beachten Sie diese [Dokumentation] (http://symfony.com/blog/new-in-symfony-2-6-Verbesserungen-für-die-Übersetzung-Komponente) – falinsky

+1

versuchen, diesen Dienst zu injizieren: 'translator.default' – Matteo

+0

Danke. translator.default funktioniert :) – b85411

Antwort

11

In Übereinstimmung mit der news announcement, ab der Version 2.6 ist die Übersetzer-Komponente als Service wie translator.default definiert.

So Ihre Service-Definition ändern:

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

mit

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

Hi @ b85411 Wenn diese oder irgendeine Antwort Ihre Frage gelöst hat, beachten Sie bitte [akzeptieren] (http://meta.stackexchange.com/q/5234/179419), indem Sie auf das Häkchen klicken. Dies zeigt der breiteren Gemeinschaft, dass Sie eine Lösung gefunden haben und sowohl dem Antworter als auch Ihnen einen guten Ruf verschaffen. Es besteht keine Verpflichtung, dies zu tun. – Matteo

+1

Ich habe diese Antwort akzeptiert. – b85411

7

Symfony 2.6 fehlenden Übersetzungen eingeführt Anmeldung und für diese die "Übersetzer" Service alias wurde durch eine Art Proxy ersetzt die echte Übersetzerklasse.

Wie in der anderen (und derzeit akzeptierten) Antwort gesagt, befindet sich die echte Übersetzerklasse jetzt auf dem "translator.default" Dienst. Aber mit diesem Dienst anstelle von "translator" wird diese neue Symfony-Funktion deaktivieren, so dass Sie dies vermeiden möchten.

Ihr Problem zu beheben und immer noch Zugang zu den neuen Funktionen haben, den Code Ihres Konstruktor ändert jede Implementierung von TranslatorInterface zu akzeptieren:

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

Dies ist die bessere Antwort. Ich würde sagen, immer "@ Übersetzer" (nie die. Default-Variante) und aktivieren/deaktivieren Protokollierung, wie Sie es wollen. Dann verwenden Sie die '\ Symfony \ Component \ Translation \ TranslatorInterface', um in Dienste zu tippen. –