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'])
ZendFramework-2.4 源代码 - 关于配置的更多相关文章
- 菜鸟nginx源代码剖析 配置与部署篇(一) 手把手实现nginx "I love you"
菜鸟nginx源代码剖析 配置与部署篇(一) 手把手配置nginx "I love you" Author:Echo Chen(陈斌) Email:chenb19870707@gm ...
- 【OpenCV入门教程之二】OPENCV3 开源之美 — 编译源代码、配置opencv_contrib
为什么要配置opencv_contrib? opencv3.0版本 功能更加模块块,一些功能模块不够完善,等足够完善在merge到主分支中,而我们图像识别中要用到的SIFT等算法被封装在xfeactu ...
- 调试EF源代码环境配置
下载EF6的源代码,运行build编译,Nuget会自动下载所需的DLL. 打开EF的工程,可以在EF解决方案下直接新建调试用的项目代码 添加EF引用时选择解决方案中的Entity Framework ...
- kafka源代码环境配置
kafka版本10.0.0.没有采用最新版本是因为项目中目前使用了这个版本. 1.安装gradle 首先进入https://gradle.org/install 查看Install manually- ...
- linux内核源代码、配置与编译
内核源代码下载:www.kernel.org Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具可读性. linux内核代码最好不要在windows ...
- igmpproxy源代码学习——配置信息加载 loadConfig
在igmpproxy主程序运行之前需要先读取配置文件,igmpproxy的配置文件通常为/etc/igmpproxy.conf或者/var/igmpproxy.conf 其内容如下: ...
- Openfire服务端源代码开发配置指南[转]
转自:http://www.micmiu.com/opensource/openfire/openfire-src-config/ 本文将图文介绍如何把openfire(以3.8.1为例)源码配置 ...
- nginx源代码分析--配置信息的继承&合并
这里仅仅讲述http{}模块下的配置: 在ngx_http_block()函数内(这个函数别调用时在ngx_inti_cycle内的ngx_conf_parse函数,这个函数遇到http命令时 回调n ...
- 在Centos7下源代码安装配置Nginx
1.安装前准备开发环境安装pcre开发包:yum install -y pcre-devel 安装编译源码所需的工具和库:yum install gcc gcc-c++ ncurses-devel p ...
随机推荐
- HDU 4143 A Simple Problem 分解因式
求一个最小的正整数x,使得(y + x) (y - x) = n成立 考虑一下n的分解因式. 可能会想到枚举n的约数,那么a * b = n成立,取最小的x即可 但是要枚举到n / 2,这样会超时. ...
- java编程如何实现从本地里读取文件1,写入到本地另一个文件2里(多种场景)
不多说,直接上干货! 有时候,我们需要用到这样的一个场景. ReadLocalFile1WriteLocalFile2.java (以下是相当于复制,读取文件1里的全部内容,并写入到文件2里) pac ...
- mysql数据库忘记密码时如何修改(一)
方法/步骤 打开mysql.exe和mysqld.exe所在的文件夹,复制路径地址 打开cmd命令提示符,进入上一步mysql.exe所在的文件夹. 输入命令 mysqld --skip-grant ...
- MySQL学习系列2--MySQL执行计划分析EXPLAIN [原创]
1.Explain语法 EXPLAIN SELECT …… 变体: EXPLAIN EXTENDED SELECT …… 将执行计划“反编译”成SELECT语句,运行SHOW WARNINGS 可 ...
- hibernate课程 初探单表映射1-11 通过hibernate API访问编写第一个小例子
hibernate 业务流程 1 创建配置对象 Configuration config = new Configuration().configure(); 2 创建服务注册对象 Service ...
- 阐述简称PO,VO,TO,BO,DAO,POJO
PO(persistant object) 持久对象 在o/r映射的时候出现的概念,如果没有o/r映射,没有这个概念存在了.通常对应数据模型(数据库),本身还有部分业务逻辑的处理.可以看成是与数据库中 ...
- 关于在C++中调用system函数
先看看下面的这一段程序: #include <iostream> #include <cstdlib> int main(int argc, char* argv[]) { s ...
- linux下 ps命令日常
要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不动态连续: (2) top:如果想对进程运行时间监控,应该用 top ...
- ionic文本颜色
需添加"ion-text"使"color='light'"生效 <div text-center ion-text color="light&q ...
- PHP的模板引擎smarty原理浅谈
mvc是开发中的一个伟大的思想,使得开发代码有了更加清晰的层次,让代码分为了三层各施其职.无论是对代码的编写以及后期的阅读和维护,都提供了很大的便利. 我们在php开发中,视图层view是不允许有ph ...