Zend框架2:了解插件和服务

Sve*_*ven 3 php zend-framework2

我现在使用Zend Framework 2已有一段时间了.不过,我真的不了解它的结构和组件.这很可能是因为我对PHP和相关模式的一般了解.

特别是:

  • 什么是服务?
    我知道框架的一个中心设计模式是服务定位器模式,但我还没有真正掌握服务的内容.此外,当人们谈论"实施服务层"时,人们的意思是什么?

  • 什么是插件?
    我认为在Zend Framework 2中,正确的术语是"控制器插件".据我所知,它可能只是一个包装器,一个提供一个很好的api用于控制器的类.
    示例:它们不是一次又一次地调用相同的10行代码,而是可以包含在一个控制器插件中,该插件包含封装这10行的方法,因此可以通过一个方法调用完成同样的操作.它是否正确?
    如果它是正确的:我为什么要将代码封装在一个插件中,我不能在没有插件的情况下将它添加到控制器中吗?

Gor*_*don 6

服务定位

服务定位器背后的基本思想是拥有一个知道如何获取应用程序可能需要的所有服务的对象.[...]使用服务定位器,服务的每个用户都对定位器具有依赖性.定位器可以隐藏其他实现的依赖关系,但您确实需要查看定位器.

ZF2 PluginManager是一种ServiceLocator.它知道如何创建控制器插件并控制它们的生命周期.控制器依赖于Manager.

服务层

使用一组服务定义应用程序的边界,该服务层建立一组可用操作并在每个操作中协调应用程序的响应.

ServiceLayers通常是没有自己状态的类.他们只协调其他课程.边界封装了应用程序中的某些用例.有关详细信息,请参阅http://martinfowler.com/bliki/BoundedContext.html.

插入

在配置而不是编译期间链接类.[...]配置不应分散在整个应用程序中,也不应该需要重建或重新部署.插件通过提供集中的运行时配置解决了这两个问题.

ZF控制器插件允许您分离各个问题,例如获取用户身份,从请求访问Params,将Flash消息设置为离散单元.有这些帮助与分离关注和防止上帝控制者.简而言之:如果您需要在控制器之间共享代码,请将其放入插件中.