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 ...
随机推荐
- Codeforces Round #375 (Div. 2) Polycarp at the Radio 优先队列模拟题 + 贪心
http://codeforces.com/contest/723/problem/C 题目是给出一个序列 a[i]表示第i个歌曲是第a[i]个人演唱,现在选出前m个人,记b[j]表示第j个人演唱歌曲 ...
- Hive 基本语法操练(六):Hive 的权限控制
Hive 的权限控制 Hive从0.10可以通过元数据控制权限.但是Hive的权限控制并不是完全安全的.基本的授权方案的目的是防止用户不小心做了不合适的事情. 为了使用Hive的授权机制,有两个参数必 ...
- js、jquery报错
js.jquery一直报错,是myecplise的问题, 右键项目->属性->builder->js validate去掉单个文件出错 右击文件->myecplise-> ...
- CentOS yum安装mcrypt
CentOS yum安装mcrypt 本篇排错的前提是只想用yum安装,不想使用源码包编译安装. php依赖一下包: #yum install libmcrypt libmcrypt-deve ...
- 解决mac下安装yeoman时没有权限问题
在mac下安装yeoman经常会出现如下图错误: 解决办法:在命令行执行-- sudo chown -R $USER /usr/local/lib/node_modules 回车就OK
- ASP.NET MVC缓存
根据缓存的位置不同,可以区分为: ①客户端缓存(缓存在用户的客户端,例如浏览器中) ②服务器缓存(缓存在服务器中,可以缓存在内存中,也可以缓存在文件里,并且还可以进一步地区分为本地缓存和分布式缓存两种 ...
- 内容显示分页数字分页 aspx
此处是aspx里面分页显示,数据层和业务层是由动软生成 当然,我们也可以可以利用listView实现分页ListView(高效分页) public partial class NewList : Sy ...
- 17.NET Core WebApi跨域问题
官方说明 CORS means Cross-Origin Resource Sharing. Refer What is "Same Origin" Part Detailed P ...
- AnyCAD在医疗中的应用
void addPoint(List<float> buffer, Vector3 pt) { buffer.Add((float)pt.X); buffer.Add((float)pt. ...
- 显示单位px、dip以及sp的区别
dip: Device Independent Pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA推荐使用这个,不依赖像素. p ...