我想创建一个插件,在控制器上使用zend-i18n / translate。在zf2上我有一个控制器插件,它为我做这个,但在zf3我无法让这个工作。如何在控制器中使用zend-i18n或使用zf3的控制器插件?
========== 我刚刚在zf doc上找到了我需要的东西:https://docs.zendframework.com/zend-mvc-i18n/services/#mvctranslator-and-translatorfactory
如果您已经在module.config.php上将转换器配置为工厂,则可以在控制器插件上注入。
答案 0 :(得分:2)
您几乎可以像the answer that @hkulekci referred to in his comment一样执行此操作。
'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 documentation或this Zend Framework blog以获取有关控制器插件管理器的更多详细信息。
答案 1 :(得分:1)
对于模型和控制器中的翻译,我在module.config.php中执行了此操作
'service_manager' => [
'factories' => [
\Zend\I18n\Translator\Translator::class => \Zend\I18n\Translator\TranslatorServiceFactory::class,
],
],
然后从我的serverContainer初始化的控制器或模型中执行:
$this->myVar = $serviceContainer->get(\Zend\I18n\Translator\Translator::class);
然后我可以通过
来访问它$this->myVar->translate('lorem ipsum');