<?php // /data/www/www.domain.com/www/module/Album/Module.php namespace Album; use Zend\ModuleManager\Feature\AutoloaderProviderInterface; use Zend\ModuleManager\Feature\ConfigProviderInterface; use Zend\ModuleManager\Feature\InitProviderInterface; use Zend\ModuleManager\Feature\BootstrapListenerInterface; use Zend\ModuleManager\Feature\LocatorRegisteredInterface; use Zend\ModuleManager\Feature\DependencyIndicatorInterface; use Zend\ModuleManager\ModuleManagerInterface; use Zend\EventManager\EventInterface; use Album\Model\Album; use Album\Model\AlbumTable; use Zend\Db\ResultSet\ResultSet; use Zend\Db\TableGateway\TableGateway; /* AutoloaderProviderInterface : loadModule---0 : invoke <getAutoloaderConfig> method */ /* DependencyIndicatorInterface : loadModule---1 : invoke <getModuleDependencies> method */ /* InitProviderInterface : loadModule---2 : invoke <init> method */ /* BootstrapListenerInterface : loadModule---3 : bind <onBootstrap> method into SharedEventManager */ // LocatorRegisteredInterface /* loadModule---4 : inject into LocatorRegisteredInterface */ /* ConfigProviderInterface : loadModule---5 : invoke <getConfig> method */ class Module implements AutoloaderProviderInterface, DependencyIndicatorInterface, InitProviderInterface, BootstrapListenerInterface, ConfigProviderInterface { /** * loadModule---0 * Zend\ModuleManager\Listener\AutoloaderListener::__invoke(ModuleEvent $e) 调用本方法 * 在触发"loadModule"事件时调用 */ public function getAutoloaderConfig() { // return array(); //使用 Composer 加载 return array( ‘Zend\Loader\ClassMapAutoloader‘ => array( __DIR__ . ‘/autoload_classmap.php‘ ), ‘Zend\Loader\StandardAutoloader‘ => array( ‘namespaces‘ => array( __NAMESPACE__ => __DIR__ . ‘/src/‘ . __NAMESPACE__ ) ) ); } /** * loadModule---1 * Zend\ModuleManager\Listener\ModuleDependencyCheckerListener::__invoke(ModuleEvent $e) 调用本方法 * 在触发"loadModule"事件时调用 */ public function getModuleDependencies(){ return array(); } /** * loadModule---2 * Zend\ModuleManager\Listener\InitTrigger::__invoke(ModuleEvent $e) 调用本方法 * 在触发"loadModule"事件时调用 */ public function init(ModuleManagerInterface $modulemanager){ // 无需返回参数 // $modulemanager instanceof Zend\ModuleManager\ModuleManager $moduleEvent = $modulemanager->getEvent(); // 获取当前模块 $module = $moduleEvent->getModule(); // $module == $this // 获取服务管理器 $serviceManager = $moduleEvent->getParam(‘ServiceManager‘,null); $applicationConfig = $serviceManager->get(‘ApplicationConfig‘); // 获取配置监听器 $configListener = $moduleEvent->getParam(‘configListener‘,null); $configListener = $moduleEvent->getConfigListener(); // 获取事件管理器 $eventManager = $modulemanager->getEventManager(); $sharedEvents = $eventManager->getSharedManager(); // 获取模块管理器中模块列表 $modulemanager->getModules() == array( ‘Application‘, ‘Album‘ ); } /** * loadModule---3 * Zend\ModuleManager\Listener\OnBootstrapListener::__invoke(ModuleEvent $e) 注册本方法到共享事件管理器,事件为“bootstrap” * 在触发"bootstrap"事件时调用 * */ public function onBootstrap(EventInterface $e){ } /** * loadModule---5 * Zend\ModuleManager\Listener\ConfigListener::onLoadModule(ModuleEvent $e) 调用本方法 * 在触发"loadModule"事件时调用 * $this->configs[‘album‘] = getConfig(); */ public function getConfig() { return include __DIR__ . ‘/config/module.config.php‘; } /** * loadModule---6 * Zend\ModuleManager\Listener\ServiceListener::onLoadModule(ModuleEvent $e) 调用本方法 * * if($module instanceof $sm[‘module_class_interface‘]){ * $config = $module->{$sm[‘module_class_method‘]}(); * $this->serviceManagers[$key][‘configuration‘][$fullname] = $config; * } * * ----------- * $serviceListener->addServiceManager($serviceLocator, * ‘service_manager‘, * ‘Zend\ModuleManager\Feature\ServiceProviderInterface‘, * ‘getServiceConfig‘ * ) 添加的服务,决定了本方法会被调用 */ public function getServiceConfig() { return array( ‘factories‘ => array( ‘Album\Model\AlbumTable‘ => function ($sm) { $tableGateway = $sm->get(‘AlbumTableGateway‘); $table = new AlbumTable($tableGateway); return $table; }, ‘AlbumTableGateway‘ => function ($sm) { $dbAdapter = $sm->get(‘Zend\Db\Adapter\Adapter‘); $resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new Album()); return new TableGateway(‘album‘, $dbAdapter, null, $resultSetPrototype); } ) ); } }
ZendFramework-2.4 源代码 - 关于Module - 模块入口文件
原文:http://www.cnblogs.com/xiaoyaogege/p/6387590.html