模块加载时事件触发的时间顺序:

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 模块加载事件触发顺序。相关推荐

  1. [置顶]       加载事件js代码

    1 /*加载事件代码*/ 2 function addLoadEvent(func) { 3 var oldonload = window. 4 if (typeof window.onload != ...

  2. nodejs学习巩固笔记-nodejs基础,Node.js 高级编程(核心模块、模块加载机制)

    目录 Nodejs 基础 大前端开发过程中的必备技能 nodejs 的架构 为什么是 Nodejs Nodejs 异步 IO Nodejs 事件驱动架构 全局对象 全局变量之 process 核心模块 ...

  3. 大前端 - nodejs 基础(核心模块、模块加载机制)

    node基础 一 nodejs 核心模块.模块加载机制 nodejs异步io和事件循环 nodejs单线程 nodejs实现api服务 nodejs核心模块和api使用 提供应用程序可直接调用库,例如 ...

  4. 深入理解DOM事件类型系列第六篇——加载事件

    前面的话 提到加载事件,可能想到了window.onload,但实际上,加载事件是一大类事件,本文将详细介绍加载事件 load load事件是最常用的一个事件,当页面完全加载后(包括所有图像.java ...

  5. 模块加载过程代码分析1

    一.概述 模块是作为ELF对象文件存放在文件系统中的,并通过执行insmod程序链接到内核中.对于每个模块,系统都要分配一个包含以下数据结构的内存区. 一个module对象,表示模块名的一个以null ...

  6. seaJS 模块加载过程分析

    先看一个seajs的官方example,  以下以seajs.use('main')为例, 解析加载mod main的过程 //app.html seajs.use("main") ...

  7. 深入理解js中的加载事件

    load load事件:当页面完全加载后(包括所有图片.javascript文件.css文件等外部资源),就会触发window上的load事件 window.onload = function(e) ...

  8. seajs动态加载js原理_seaJS 模块加载过程分析

    先看一个seajs的官方example,  以下以seajs.use('main')为例, 解析加载mod main的过程 //app.html seajs.use("main") ...

  9. ES6模块加载方案 CommonJS和AMD ES6和CommonJS

    目录 CommonJS CommonJS和AMD的对比 ES6和CommonJS 改成ES6 exports和module.exports CommonJS 每个文件就是一个模块,有自己的作用域.在一 ...

  10. FreeSwitch 的初始化及其模块加载过程

    FS 主函数main() Freeswitch的主函数是在文件switch.c中定义的,该文件的260行是整个程序的入口,主函数主要完成的功能是包括,命令行解析,初始化apr库,构建全局内存池,模块加 ...

最新文章

  1. 交互式数据可视化-D3.js(一)
  2. Linux supervisor守护进程的安装和使用
  3. 计算机二级access选择题题库_资料最新计算机二级题库,选择题资料汇总+全真试题分享(Office)...
  4. 来自 Facebook 内部的 Python 学习知识图谱,太全了!
  5. JFreeChart 使用介绍
  6. java mybatis 代码生成器_Java MyBatis-Plus 代码生成器
  7. 网络串流_串流NFL足球的最便宜方式(无需电缆)
  8. ES6学习(新增字符串方法)
  9. 高级php进修,PHP进修笔记一:PHP的数据类型与常量应用
  10. 多系统并行服务器,具有分布式并行I/O接口的分布式并行服务器系统的性能研究...
  11. redis中不同value类型的存取操作方式
  12. php 日期转毫秒_高性能的PHP日志系统 SeasLog 使用
  13. delphi接口带上请求头是什么意思_Gin框架中使用JWT进行接口验证
  14. generator tar.gz file in windows
  15. php数据多层关联,php – 我们如何进行laravel多级关联
  16. 管理新语:如果经验有用,大家都去养老院招人了
  17. 简单的Java代码实现斗地主
  18. 怎么取消两台计算机共享,小编教你两台电脑如何共享文件
  19. 99美金和299美金的开发者证书的区别
  20. NAT技术与代理服务器详解

热门文章

  1. Hibernate,JPA注解@ManyToMany_JoinTable
  2. sublime配置markdown
  3. td.moveRow方法
  4. iOS 不同数据类型存入可变数组
  5. 看完这一篇,解决Mac电脑90%的软件烦恼
  6. wordpress后台加载速度异常缓慢排查记录(原创)
  7. FusionChart样例
  8. 【二分答案】【Heap-Dijkstra】bzoj2709 [Violet 1]迷宫花园
  9. A* search算法解迷宫
  10. 【转】Unix的文件系统的内部结构,主要是超级块、inode相关知识