在ZF2中,如何在Controller和View中编写单个插件?

Han*_*ant 1 zend-framework2

在我的ZF2应用程序中,我正在尝试编写一个插件来提供PHP Date实用程序的包装器.我已经计划过这个插件会有apis来初始化,转换和检索日期值.

我知道如何通过扩展为Controller编写插件

Zend\Mvc\Controller\Plugin\AbstractPlugin类

并且还知道热门为View编写一个插件来扩展

Zend\View\Helper\AbstractHelper类.

但是我们如何编写一个可以在Controller和View中使用的插件呢?

DrB*_*eza 6

我会编写一个可以从ServiceManager中检索的类(工厂或可调用的),并允许两个插件类型访问此类.这允许您将逻辑和功能保存在单个类中,Zend Navigation采用类似的方法,将导航数据存储在助手之间共享的工厂类中.

一个非常hacky的替代方法是创建一个Controller插件,然后通过控制器插件管理器请求您的控制器插件,该管理器可以从ServiceManager获得.当然,View插件需要ServiceManagerAwareInterface访问ServiceManager.

$plugin = $this->getServiceManager()->get('ControllerPluginManager')->get('myplugin');
Run Code Online (Sandbox Code Playgroud)

然后将__invoke()参数传递给插件.虽然这是可行的,但第一种方法要好得多.