天天看點

ZendFramework-2.4 源代碼 - 關于配置

$applicationConfig = $serviceManager->setService('ApplicationConfig'); // 擷取配置  /data/www/www.domain.com/www/config/application.config.php
    
    // -----------case.0------------------
    // -----------服務管理器的配置------------------
    $applicationConfig = array(
        // ...
        'service_manager'=>array(
            'allow_override'=>null,
            'factories'=>array( // 服務的建立方式:調用工廠建立  return $xxxfactory->createService($serviceLocator);
                'EventManager'  => 'Zend\Mvc\Service\EventManagerFactory',
                'ModuleManager' => 'Zend\Mvc\Service\ModuleManagerFactory',
                // 'LazyServiceFactory' => 'Zend\ServiceManager\Proxy\LazyServiceFactoryFactory',
            ),
            'abstract_factories'=>array( // 服務的建立方式:調用抽象工廠建立 $abstractFactory->createServiceWithName($serviceLocator,$cName, $rName); 
                // 服務的擷取方式:$serviceManager->get('zendnavigationstyle1');
                'zendnavigationstyle1'=>'Zend\Navigation\Service\NavigationAbstractServiceFactory'
            ),
            'invokables' => array( // 服務的建立方式:直接 new 出對象  return new $invokable();
                'SharedEventManager' => 'Zend\EventManager\SharedEventManager',
                'Album\Service\AlbumServiceInterface' => 'Album\Service\AlbumService',// return (new Album\Service\AlbumService());
                'Zendx\ModuleManager\Feature\MyMailManagerProviderInterface' => 'Zendx\ModuleManager\Feature\MyMailManagerProvider',
            ),
            'services'=>array( // 服務的建立方式:“鍵值對”的“值”是執行個體對象
                'instance_1'=>new Instance_1(),
                'PHPMailer'=>new PHPMailer(), // $serviceManager->get('PHPMailer');
                'myconfig1'=>array( // $serviceManager->get('myconfig1');
                    'key1'=>'key1_value',
                    'key2'=>'key2_value',
                ),    
            ),
            'aliases'=>array( // 别名  
                // 服務的擷取方式:$serviceManager->get('Zend\EventManager\EventManagerInterface') === $serviceManager->get('EventManager');
                'Zend\EventManager\EventManagerInterface'     => 'EventManager',
                'Zend\ServiceManager\ServiceLocatorInterface' => 'ServiceManager',
                'Zend\ServiceManager\ServiceManager'          => 'ServiceManager',
            ),
            'initializers'=>array( // 建立完對象的初始化器
                'ServiceLocatorAwareInitializer' => function ($instance, ServiceLocatorInterface $serviceLocator) {
                    if ($instance instanceof ServiceLocatorAwareInterface) {
                        $instance->setServiceLocator($serviceLocator);
                    }
                }
            ),
            'shared'=>array( // 建立出來的對象是否共享。如果不配置,預設是共享的。
                'EventManager' => false, 
            ),
            'delegators'=>array(  // 委托
                'lazyService'=>array(
                    'LazyServiceFactory'
                )
            )
        ),
        // ...
    )
    $applicationConfig['service_manager'] ---影響--->  Zend\ServiceManager\ServiceManager(new Service\ServiceManagerConfig($applicationConfig['service_manager']));
    
    // -----------子產品監聽器的配置------------------
    $applicationConfig = array(
        // ...
        'module_listener_options'=>array(
            // Zend\ModuleManager\Listener\ConfigListener的配置
            'ConfigCacheEnabled'=>false, // 配置緩存是否啟用
            'ConfigCacheFile'=>__DIR__.'/cache/mergedConfigCacheFile.config.php', // 配置緩存檔案的名字,即:所有配置檔案合并後的檔案名 /data/www/www.domain.com/www/config/mergedConfigCacheFile.cache.php
            'ConfigGlobPaths'=>array( // 配置檔案抓取的路徑
                'config/autoload/{,*.}{global,local}.php',
            ), 
            'ConfigStaticPaths'=>array(), // 配置檔案的靜态的路徑
            
            // Zend\Loader\ModuleAutoloader的配置
            'ModulePaths'=>array(
                // 完整比對
                'Zendx\Payment'=>__DIR__.'/../library/Zendx/Payment', // new Zendx\Payment\Module() ---> /data/www/www.domain.com/www/library/Zendx/Payment/Module.php
                'Zendx\PHPExcel'=>__DIR__.'/../library/Zendx/PHPExcel', // new Zendx\PHPExcel\Module() ---> /data/www/www.domain.com/www/library/Zendx/PHPExcel/Module.php
                // 字首比對
                'Zendx\Wechat\*'=>__DIR__.'/../library/Zendx/Wechat', // new Zendx\Wechat\PublicPlatform\Module() OR new Zendx\Wechat\Security\Module() ---> /data/www/www.domain.com/www/library/Security/Module.php
                // 自動搜尋
                './module', // new Module1\Module(); ---> ./module/Module1/Module.php  OR new Module1\Module1Sub\Module(); ---> ./module/Module1/Module1Sub/Module.php
                './vendor',
            ),
            'ModuleMapCacheEnabled'=>false, // 子產品加載路徑的緩存是啟用
            'ModuleMapCacheFile'=>__DIR__.'/cache/moduleMapCacheFile.config.php',
            
            // 在ConfigListener做配置檔案合并時會放入
            'ExtraConfig'=>array(
            
            )
        )
        // ...
    );
    $applicationConfig['module_listener_options'] ---影響--->  Zend\ModuleManager\Listener\DefaultListenerAggregate(new ListenerOptions($moduleListenerOptions)) 内的監聽器
    $moduleListenerOptions = $applicationConfig['module_listener_options'];
    $moduleListenerOptions['ConfigGlobPaths']/$moduleListenerOptions['ConfigStaticPaths']  ---影響--->  new Zend\ModuleManager\Listener\ConfigListener($moduleListenerOptions)
    沒有配置項  ---影響--->  Zend\ModuleManager\Listener\LocatorRegistrationListener($moduleListenerOptions)
    $moduleListenerOptions['ModuleMapCacheEnabled']/$moduleListenerOptions['ModulePaths']/$moduleListenerOptions['ModuleMapCacheFile']  ---影響--->  Zend\ModuleManager\Listener\ModuleLoaderListener($moduleListenerOptions)
    沒有配置項  ---影響--->  Zend\ModuleManager\Listener\AutoloaderListener($moduleListenerOptions)
    沒有配置項  ---影響--->  Zend\ModuleManager\Listener\InitTrigger($moduleListenerOptions)
    沒有配置項  ---影響--->  Zend\ModuleManager\Listener\OnBootstrapListener($moduleListenerOptions)

    // -----------服務管理器配置注入的聲明------------------
    
    $applicationConfig = array(
        // ...
        'service_listener_options'=>array(
            'key_non_used_1'=>array( // 擴充自己的管理器 $serviceManager->get('MyMailManager');
                'service_manager'=>'MyMailManager',
                'config_key'=>'my_mails', // $configListener->getMergedConfig(false)['my_mails']
                // 從子產品入口類中擷取配置的方式
                // 隻需 /data/www/www.domain.com/www/module/Module1/Module.php 中的 Module 類實作如下内容
                'interface'=>'Zendx\ModuleManager\Feature\MyMailManagerProviderInterface',
                'method'=>'getMyMailManagerConfig', // $albumModule->getMyMailManagerConfig();
            ),
            'key_non_used_2'array(
                'service_manager'=>'LogWriterManager',
                'config_key'=>'log_writers',
                'interface'=>'Zend\ModuleManager\Feature\LogWriterProviderInterface',
                'method'=>'getLogWriterConfig'
            )
        )
        // ...
    );
    $serviceListenerOptions = $applicationConfig['service_listener_options'];
    $applicationConfig['service_listener_options']  ---影響--->  Zend\ModuleManager\Listener\ServiceListener($serviceLocator, $this->defaultServiceConfig)
    
    // -----------子產品管理器的配置------------------ 
    // 子產品管理器,負責統一管理各個子產品
    $applicationConfig = array(
        // ...
        'modules' => array(
            'Application',
            'Album',
            'Module1',
            'Module1\Module1Sub', // ---> /data/www/www.domain.com/www/module/Module1/Module1Sub/Module.php
            'Module1\Module1Sub\Module1SubSub', // ---> /data/www/www.domain.com/www/module/Module1/Module1Sub/Module1SubSub/Module.php
        )
        // ...
    );
    $applicationConfig['modules'] ---影響---> new Zend\ModuleManager\ModuleManager($application['modules'], $events);
    
    // -----------case.1------------------
    // -----------應用監聽器的配置------------------
    $serviceManager->get('Config') =  $configListener->getMergedConfig(false) 
        === array_merge(
                根據$applicationConfig['module_listener_options']['ConfigGlobPaths']抓取的,
                根據$applicationConfig['module_listener_options']['ConfigStaticPaths']抓取的,
                根據$applicationConfig['module_listener_options']['ExtraConfig']配置的,
                $modulex->getConfig()配置的
        )
    
    $applicationConfig = array(
        // ...
        'listeners' => array(
            'RouteListener',
            'DispatchListener',
            'HttpMethodListener',
            'ViewManager',
            'SendResponseListener',
        )
        // ...
    );
    $listeners = array_merge($config['listeners'], $applicationConfig['listeners'])
    $listeners ---影響--->  Zend\Mvc\Application::bootstrap($applicationConfig['listeners'])       

轉載于:https://www.cnblogs.com/xiaoyaogege/p/6387563.html