Как получить переводчик внутри плагина контроллера на ZF3
Я хочу создать плагин для использования zend-i18n/translate на контроллере. На zf2 у меня есть плагин контроллера, который делает это для меня, но на zf3 я не мог заставить это работать. Как я могу использовать zend-i18n внутри контроллера или через плагин контроллера с zf3?
========== Я только что нашел то, что мне нужно здесь, на zf doc: https://docs.zendframework.com/zend-mvc-i18n/services/
если вы уже настроили переводчик как фабричный на вашем module.config.php, вы можете добавить его в свой плагин контроллера.
2 ответа
Вы можете фактически сделать то же самое как ответ, который @hkulekci упомянул в своем комментарии.
'service_manager' => [
'factories' => [
\Zend\I18n\Translator\TranslatorInterface::class => \Zend\I18n\Translator\TranslatorServiceFactory::class,
]
]
а также
'controller_plugins' => [
'invokables' => [
'translate' => \Zend\I18n\View\Helper\Translate::class
]
]
После этого вы можете получить плагин перевода, как в ваших методах действия контроллера, например:
public someAction(){
$translator = $this->translate;
}
Обратитесь к документации Zend Framework или этому блогу Zend Framework для получения более подробной информации о диспетчере плагинов контроллера.
Для перевода в модель и контроллер, я сделал это в моем module.config.php
'service_manager' => [
'factories' => [
\Zend\I18n\Translator\Translator::class => \Zend\I18n\Translator\TranslatorServiceFactory::class,
],
],
Затем из моего контроллера или модели, у которой инициализирован serviceContainer, я делаю:
$this->myVar = $serviceContainer->get(\Zend\I18n\Translator\Translator::class);
Тогда я могу получить к нему доступ, выполнив
$this->myVar->translate('lorem ipsum');