Zendframework 模块加载事件触发顺序。
模块加载时事件触发的时间顺序:
0、loadModules(ModuleEvent::EVENT_LOAD_MODULES)
1、 loadModule.resolve(ModuleEvent::EVENT_LOAD_MODULE_RESOLVE):模块将被加载时触发,事件监听者将模块名解析成类的实例。监听者使用getModuleName()获取模块名。
2、 loadModule(ModuleEvent::EVENT_LOAD_MODULE):一旦模块被解析成对象后,本事件会被触发,与之相对的事件监听者会加载模块(将新建的对象传递给所有的监听者)。
3、 mergeConfig(ModuleEvent::EVENT_MERGE_CONFIG):所有的模块被加载后,本事件被触发。默认情况下Zend\ModuleManager\Listener\ConfigListener以1000的优先级监听本事件,并且合并所有的配置。
4、 loadModules.post(ModuleEvent::EVENT_LOAD_MODULES_POST):本事件在模块完成后被module manager触发,允许任何监听器执行工作。比如上面的ConfigListener。用来确保所有的模块都加载完成。
每一次页面请求都会调用init()和onBootstrap(),所以保证init()和onBootstrap()轻量实现,不要让这两个方法做大量的工作,一般和事件相关的任务可以交给这两个方法。其余的如logger或者mailer和数据库相关的交给serviceManager。
模块代码不要在模块目录下进行任何写操作,如果非得要有写操作,请写入其他目录,以保证模块目录的一致性。
为了防止模块名冲突,可以添加前缀。
模块管理器使用Zend\Loader\ModuleAutoloader来自动加载web application里的所有要求加载的模块。一般情况ModuleManager里的DefaultListenerAggregate将ModuleAutoloader设置为监听器,所以ModuleAutoloader会自动加载,我们所要做的就是提供一组模块的路径(一般相对于Application的根目录)。因此在public/index.php中我们添加了chdir(dirname(__DIR__))语句。
(这一部分与实际代码有出入,以实际代码为准)
可以使用PHAR对模块打包,但尽量不要使用压缩类型,会增加CPU压力。
ModuleManager是作为一个服务来运行的,由ServiceManager调度。所以有必要看看ServiceManager。
每一个模块的唯一入口时Module类,可以重载或者添加额外的application配置,执行初始化:注册autoloader、services、event listeners、声明依赖。
转载于:https://www.cnblogs.com/san-fu-su/p/5690163.html
Zendframework 模块加载事件触发顺序。相关推荐
- [置顶] 加载事件js代码
1 /*加载事件代码*/ 2 function addLoadEvent(func) { 3 var oldonload = window. 4 if (typeof window.onload != ...
- nodejs学习巩固笔记-nodejs基础,Node.js 高级编程(核心模块、模块加载机制)
目录 Nodejs 基础 大前端开发过程中的必备技能 nodejs 的架构 为什么是 Nodejs Nodejs 异步 IO Nodejs 事件驱动架构 全局对象 全局变量之 process 核心模块 ...
- 大前端 - nodejs 基础(核心模块、模块加载机制)
node基础 一 nodejs 核心模块.模块加载机制 nodejs异步io和事件循环 nodejs单线程 nodejs实现api服务 nodejs核心模块和api使用 提供应用程序可直接调用库,例如 ...
- 深入理解DOM事件类型系列第六篇——加载事件
前面的话 提到加载事件,可能想到了window.onload,但实际上,加载事件是一大类事件,本文将详细介绍加载事件 load load事件是最常用的一个事件,当页面完全加载后(包括所有图像.java ...
- 模块加载过程代码分析1
一.概述 模块是作为ELF对象文件存放在文件系统中的,并通过执行insmod程序链接到内核中.对于每个模块,系统都要分配一个包含以下数据结构的内存区. 一个module对象,表示模块名的一个以null ...
- seaJS 模块加载过程分析
先看一个seajs的官方example, 以下以seajs.use('main')为例, 解析加载mod main的过程 //app.html seajs.use("main") ...
- 深入理解js中的加载事件
load load事件:当页面完全加载后(包括所有图片.javascript文件.css文件等外部资源),就会触发window上的load事件 window.onload = function(e) ...
- seajs动态加载js原理_seaJS 模块加载过程分析
先看一个seajs的官方example, 以下以seajs.use('main')为例, 解析加载mod main的过程 //app.html seajs.use("main") ...
- ES6模块加载方案 CommonJS和AMD ES6和CommonJS
目录 CommonJS CommonJS和AMD的对比 ES6和CommonJS 改成ES6 exports和module.exports CommonJS 每个文件就是一个模块,有自己的作用域.在一 ...
- FreeSwitch 的初始化及其模块加载过程
FS 主函数main() Freeswitch的主函数是在文件switch.c中定义的,该文件的260行是整个程序的入口,主函数主要完成的功能是包括,命令行解析,初始化apr库,构建全局内存池,模块加 ...
最新文章
- 交互式数据可视化-D3.js(一)
- Linux supervisor守护进程的安装和使用
- 计算机二级access选择题题库_资料最新计算机二级题库,选择题资料汇总+全真试题分享(Office)...
- 来自 Facebook 内部的 Python 学习知识图谱,太全了!
- JFreeChart 使用介绍
- java mybatis 代码生成器_Java MyBatis-Plus 代码生成器
- 网络串流_串流NFL足球的最便宜方式(无需电缆)
- ES6学习(新增字符串方法)
- 高级php进修,PHP进修笔记一:PHP的数据类型与常量应用
- 多系统并行服务器,具有分布式并行I/O接口的分布式并行服务器系统的性能研究...
- redis中不同value类型的存取操作方式
- php 日期转毫秒_高性能的PHP日志系统 SeasLog 使用
- delphi接口带上请求头是什么意思_Gin框架中使用JWT进行接口验证
- generator tar.gz file in windows
- php数据多层关联,php – 我们如何进行laravel多级关联
- 管理新语:如果经验有用,大家都去养老院招人了
- 简单的Java代码实现斗地主
- 怎么取消两台计算机共享,小编教你两台电脑如何共享文件
- 99美金和299美金的开发者证书的区别
- NAT技术与代理服务器详解