Symfony: ЛоггингТранслятор против переводчика


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

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...

В чем разница между этими двумя?

Author: Matteo, 2015-03-20

2 answers

В соответствии с новостным объявлением , начиная с версии 2.6 компонент переводчика определяется как сервис, подобный translator.default.

Поэтому измените определение своей службы:

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

С

arguments: [@doctrine.orm.entity_manager, @translator.default]
 11
Author: Matteo, 2015-03-20 09:51:08

В Symfony 2.6 введено ведение журнала отсутствующих переводов, и для этого псевдоним службы "переводчик" был заменен каким-то прокси-сервером для реального класса переводчиков.

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

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

public function __construct(\Doctrine\ORM\EntityManager $entityManager, \Symfony\Component\Translation\TranslatorInterface $translator)
 7
Author: Derek, 2015-12-17 11:54:44