ZendFramework-2.4 源代码 - 关于Module - 模块入口文件

 

<?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);
                } 
            ) 
        );
    }
}

 

posted on 2017-02-10 18:32  周~~  阅读(533)  评论(0编辑  收藏  举报

导航