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...
В чем разница между этими двумя?
2 answers
В соответствии с новостным объявлением , начиная с версии 2.6 компонент переводчика определяется как сервис, подобный translator.default
.
Поэтому измените определение своей службы:
arguments: [@doctrine.orm.entity_manager, @translator]
С
arguments: [@doctrine.orm.entity_manager, @translator.default]
В Symfony 2.6 введено ведение журнала отсутствующих переводов, и для этого псевдоним службы "переводчик" был заменен каким-то прокси-сервером для реального класса переводчиков.
Как сказано в другом (и в настоящее время принятом) ответе, класс реального переводчика теперь находится в службе "переводчик.по умолчанию". Но использование этой службы вместо "переводчик" отключит эту новую функцию Symfony, поэтому вы можете этого избежать.
Чтобы решить вашу проблему и все еще иметь доступ к новым функциям, измените код вашего конструктора, чтобы принять любую реализацию TranslatorInterface:
public function __construct(\Doctrine\ORM\EntityManager $entityManager, \Symfony\Component\Translation\TranslatorInterface $translator)