我的应用程序(ZF3)中有一个抽象控制器,它扩展了我的所有模块控制器。
我在这里调用我的基本翻译器,并且每个模块都应用翻译器,但是当从ZF3中删除getServiceLocator()时,我想知道我可以做些什么来创建一个$ this->翻译器扩展控制器。
这是我在ZF2中使用的:
$this->translator = $this->getServiceLocator()->get('translator');
我找到了这些文档,但这对我来说似乎是另一个目的。
https://zendframework.github.io/zend-mvc/migration/to-v2-7/#servicelocatoraware-initializers
答案 0 :(得分:0)
有不同的方法可以解决这个问题。
首先考虑的解决方案是在每个控制器中注入服务定位器,而不是其他任何东西。 为了做到这一点,你需要通过构造函数注入它并更改工厂的控制器(工厂,如果有很多)。
当你这样做时,你只能注入翻译而不是容器(服务管理器)。
初始化程序确实是一种方法,但它们可能会在以后删除。我宁愿使用delegator。这样,您不必通过构造函数注入,但是您需要通过setter注入,这意味着您引入了时间耦合...