$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'])

ZendFramework-2.4 源代码 - 关于配置的更多相关文章

  1. 菜鸟nginx源代码剖析 配置与部署篇(一) 手把手实现nginx "I love you"

    菜鸟nginx源代码剖析 配置与部署篇(一) 手把手配置nginx "I love you" Author:Echo Chen(陈斌) Email:chenb19870707@gm ...

  2. 【OpenCV入门教程之二】OPENCV3 开源之美 — 编译源代码、配置opencv_contrib

    为什么要配置opencv_contrib? opencv3.0版本 功能更加模块块,一些功能模块不够完善,等足够完善在merge到主分支中,而我们图像识别中要用到的SIFT等算法被封装在xfeactu ...

  3. 调试EF源代码环境配置

    下载EF6的源代码,运行build编译,Nuget会自动下载所需的DLL. 打开EF的工程,可以在EF解决方案下直接新建调试用的项目代码 添加EF引用时选择解决方案中的Entity Framework ...

  4. kafka源代码环境配置

    kafka版本10.0.0.没有采用最新版本是因为项目中目前使用了这个版本. 1.安装gradle 首先进入https://gradle.org/install 查看Install manually- ...

  5. linux内核源代码、配置与编译

    内核源代码下载:www.kernel.org Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具可读性. linux内核代码最好不要在windows ...

  6. igmpproxy源代码学习——配置信息加载 loadConfig

            在igmpproxy主程序运行之前需要先读取配置文件,igmpproxy的配置文件通常为/etc/igmpproxy.conf或者/var/igmpproxy.conf 其内容如下: ...

  7. Openfire服务端源代码开发配置指南[转]

    转自:http://www.micmiu.com/opensource/openfire/openfire-src-config/   本文将图文介绍如何把openfire(以3.8.1为例)源码配置 ...

  8. nginx源代码分析--配置信息的继承&合并

    这里仅仅讲述http{}模块下的配置: 在ngx_http_block()函数内(这个函数别调用时在ngx_inti_cycle内的ngx_conf_parse函数,这个函数遇到http命令时 回调n ...

  9. 在Centos7下源代码安装配置Nginx

    1.安装前准备开发环境安装pcre开发包:yum install -y pcre-devel 安装编译源码所需的工具和库:yum install gcc gcc-c++ ncurses-devel p ...

随机推荐

  1. 前端-页面性能调试:Hiper

    前端-页面性能调试:Hiper   我们写单页面应用,想看页面修改后性能变更其实挺繁琐的.有时想知道是「正优化」还是「负优化」只能靠手动刷新查看network.而Hiper很好解决了这一痛点(其实Hi ...

  2. Linux下安装软件遇见的问题汇总

    1.安装monodevelop 安装环境Linux Mint17.1 在软件在中心直接安装monodevelop,安装完成后直接启动界面“一闪而过”,解决办法: 软件中心安装 mono-complet ...

  3. jQuery遍历Table表格的行和列

    遍历Table表格的行和列,在开发中比较常用的功能,特别是前端开发人员,不多说,直接上代码,下面代码只是弹出第一列字段,请各位自己根据需求修改和扩展! <!DOCTYPE html PUBLIC ...

  4. (转载)C#线程优先级详解

    计算机中经常会有多个任务同时运行,其中总有一些看起来更紧急,更需要优先完成.比如我们现在有两个任务,一个任务是下载一部电影,另一个任务是检测用户的输入.显然及时响应用户操作应具有更高的优先级,因为我们 ...

  5. 改善WPF应用程序性能的10大方法 (转发)

    WPF(Windows Presentation Foundation)应用程序在没有图形加速设备的机器上运行速度很慢是个公开的秘密,给用户的感觉是它太吃资源了,WPF程序的性能和硬件确实有很大的关系 ...

  6. linux日常1-踢出用户

    踢掉自己不用的终端 1.查看系统在线用户 w 2.查看哪个属于此时自己的终端(我开了两个连接) who am i 3.pkill掉自己不适用的终端 pkill -kill -t pts/1 注意: 如 ...

  7. JavaScript_HTML DEMO_2_事件

    如需在用户点击某个元素时执行代码,请向一个HTML事件属性添加JavaScript代码  OnClick=JavaScriptcript 对事件做出反应 HTML事件属性 使用HTML DOM来分配事 ...

  8. 三种zigbee网络架构详解

    在万物互联的背景下,zigbee网络应用越加广泛,zigbee技术具有强大的组网能力,可以形成星型.树型和网状网,三种zigbee网络结构各有优势,可以根据实际项目需要来选择合适的zigbee网络结构 ...

  9. JPA将查询结果转换为DTO对象

    前言 JPA支持使用@Query自定义查询,查询的结果需要字节用DTO对象接收,如果使用HQL的查询语句,可以将直接将DTO对象的构造方法传入hql中,直接转为DTO对象:而如果使用native sq ...

  10. 比特币中P2PKH(pay-to-public-key-hash)的锁定脚本和解锁脚本

    脚本格式 P2PKH的锁定脚本为: OP_DUP OP_HASH160 PUSHDATA(<Cafe Public Key Hash>) OP_EQUALVERIFY OP_CHECKSI ...