$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