2015-03-20 1 views
7

Я хочу, чтобы впрыснуть мои переводы строки в сервис, так что я использовал это в определении сервиса:Symfony: LoggingTranslator против Переводчик

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

Пожалуйста, учитывайте это [документация] (http://symfony.com/blog/new-in-symfony-2-6-updates-for-the-translation-component) – falinsky

+1

попробуйте ввести эту услугу: 'translator.default' – Matteo

+0

Спасибо. translator.default works :) – b85411

ответ

11

В соответствии с news announcement, начиная с версии 2.6, компонент переводчика определяется как услуга типа translator.default.

Так изменить определение сервиса:

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

с

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

Привет @ b85411 если этот или любой ответ решил ваш вопрос, пожалуйста, рассмотрите [его принятие] (http://meta.stackexchange.com/q/5234/179419), нажав на галочку. Это указывает более широкому сообществу, что вы нашли решение и дали некоторую репутацию как самому, так и самому себе. Это не обязательно. – Matteo

+1

Я принял этот ответ. – b85411

7

Symfony 2,6 представил недостающие переводы регистрации и для этого псевдоним «переводчик» служба была заменена какой-то прокси-сервер для реальный класс переводчиков.

Как сказано в другом (и в настоящее время принятом) ответе, настоящий класс переводчика теперь находится в сервисе «translator.default». Но, используя эту услугу вместо , «переводчик» отключит эту новую функцию Symfony, поэтому вы можете этого избежать.

Чтобы устранить проблему, и по-прежнему иметь доступ к новым возможностям, изменить код вашего конструктора принять любую реализацию TranslatorInterface:

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

Это лучший ответ. Я бы сказал, всегда использовать '@ translator' (никогда не вариант .default) и включать/отключать ведение журнала, как вы этого хотите. Затем используйте '\ Symfony \ Component \ Translation \ TranslatorInterface' тип typehint в сервисах. –