zf2整个系统的运行中,牵涉到的核心概念,也就是开发中常见的有这么几个:serviceManager,eventManager一般我们进行常规开发的时候(也就是按照官方文档一步步来开发的时候),serviceManager用的比较多,那么我就先讲讲serviceManager的作用吧
1.serviceManager的作用
根据字面意思,也就是服务管理器的意思,也就是说,你在系统中需要调用到的类都可以通过serviceManager(serviceLocator)的get方法得到,当然这些需要预先放置到serviceManager的全部配置(application.config.php)中,另外自己需要的也要放置到模块配置(module.config.php)中,在系统启动后,可以通过打印config(print_r($this->getServiceLocator->get(‘Config’)))服务来得到所有的配置,如果没有在这里面,那么你通过serviceManager就不一定能调用出来了
上面只所有说不一定,其中一个原因就是在module.config.php配置里面的相关配置,service_manager的选项中,又包括了invokables,abstract_factories,factories,shared等,其中abstract_factories的作用就有点像__call的作用了,他可以实现规定在系统调用时如何选择相关的类,invokables顾名思义就是为了缩短类的名称或者便于理解,又或者为了重复命名,factories嘛,一般是系统级别的命名上,比如缓存管理(sessionManager)啦,又或者是数据库管理(DbAdapter)等,在abstract_factories和factories里面的类,调用的时候会自动初始化一个实例
我们来讲下abstract_factories的一个实例,我们定义个类:
然后在module.config.php中service_manager配置这样的一条:
实际的,在命名空间Test下面还有和common同级别的Db文件夹(命名空间)
那么我们在Test\Controller中的具体controller操作中,这样的调用就会起效果:
2.顺便说下eventManager的作用
eventManager的作用就是,把一系列需要发生的操作(运行的代码)依附到某个行为上,在zf2中,module.php运行加载的时候,就有很多的行为(events)被很多反应(listeners),然后当系统执行run的时候,这些依附着的所有listeners被触发,从而按顺序进行执行,这也就解析了,当执行attach的时候,有个优先级的概念
转自http://helion.name/archives/563.html