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、声明依赖。
Zendframework 模块加载事件触发顺序。的更多相关文章
- node模块加载层级优化
模块加载痛点 大家也或多或少的了解node模块的加载机制,最为粗浅的表述就是依次从当前目录向上级查询node_modules目录,若发现依赖则加载.但是随着应用规模的加大,目录层级越来越深,若是在某个 ...
- 关于asp.net中页面事件加载的先后顺序
一.ASP.NET 母版页和内容页中的事件 母版页和内容页都可以包含控件的事件处理程序.对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件.控件事件 ...
- Python 模块化 模块搜索顺序、重复导入、模块加载列表(五)
模块搜索顺序.重复导入.模块加载列表 0x00 模块搜索顺序: 举例: #test.py import sys for p in sys.path: print(p) 运行结果: C:\python ...
- JS事件 加载事件(onload)注意:1. 加载页面时,触发onload事件,事件写在<body>标签内。 2. 此节的加载页面,可理解为打开一个新页面时。
加载事件(onload) 事件会在页面加载完成后,立即发生,同时执行被调用的程序. 注意:1. 加载页面时,触发onload事件,事件写在<body>标签内. 2. 此节的加载页面,可理解 ...
- nodejs 模块加载顺序
nodejs 模块加载顺序 一.当引入模块的形式是 require('lt') 时(1).先找当前文件夹下的node_modules文件夹下的lt文件夹下的package.json 文件指定的main ...
- js 动态加载事件的几种方法总结
本篇文章主要是对js 动态加载事件的几种方法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 有些时候需要动态加载javascript事件的一些方法往往我们需要在 JS 中动态添 ...
- 实现一个类 RequireJS 的模块加载器 (二)
2017 新年好 ! 新年第一天对我来说真是悲伤 ,早上兴冲冲地爬起来背着书包跑去实验室,结果今天大家都休息 .回宿舍的时候发现书包湿了,原来盒子装的牛奶盖子松了,泼了一书包,电脑风扇口和USB口都进 ...
- 使用RequireJS并实现一个自己的模块加载器 (一)
RequireJS & SeaJS 在 模块化开发 开发以前,都是直接在页面上引入 script 标签来引用脚本的,当项目变得比较复杂,就会带来很多问题. JS项目中的依赖只有通过引入JS的顺 ...
- 第三章:模块加载系统(requirejs)
任何一门语言在大规模应用阶段,必然要经历拆分模块的过程.便于维护与团队协作,与java走的最近的dojo率先引入加载器,早期的加载器都是同步的,使用document.write与同步Ajax请求实现. ...
随机推荐
- Hadoop学习笔记(3)——分布式环境搭建
Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里, ...
- Java异常的一个小知识
有以下两个代码: package com.lk.A; public class Test3 { public static void main(String[] args) { try { int a ...
- mysql 中浮点型与定点型记录
为了能够引起大家的重视,在介绍浮点数与定点数以前先让大家看一个例子: mysql> CREATE TABLE test (c1 float(10,2),c2 decimal(10,2)); Qu ...
- JS内存泄露常见原因
详细内容请点击 分享的笔记本-前端 开发中,我们常遇见的一些关于js内存泄露的问题,有时候我们常常会找半天找不出原因,这里给大家介绍简单便捷的方法 1.闭包上下文绑定后没有释放: 2.观察者模式在 ...
- CSS3--动态实现ToolTip效果(实例)
效果图如下↓↓↓↓↓ (知识点见代码注释) HTML <!DOCTYPE html> <html lang="en"> <head> < ...
- Part 72 to 81 Talking about Dictionary and List collection in C#
Part 72 What is dictionary in c# Part 73 What is dictionary in c# continued Part 74 List colle ...
- Node.js的安装
学习一下JavaScript的另一个运行环境---Node.js Node.js是一个基于Chrome V8 引擎的 JavaScript 运行建立的平台, 用于方便地搭建响应速度快.易于扩展并且是全 ...
- Cocos2d-JS事件处理机制
在很多图形用户技术中,事件处理机制一般都有三个重要的角色:事件.事件源和事件处理者.事件源是事件发生的场所,通常就是各个视图或控件,事件处理者是接收事件并对其进行处理的一段程序.事件处理机制中三个角色 ...
- 7款超具个性的HTML5播放器
这篇文章我们要分享一些很有个性的HTML5音乐播放器和视频播放器,它们都具有播放器的大部分功能,并以HTML5和JavaScript实现.这些HTML5播放器有着非常漂亮的外观,很多你都无需自己重新定 ...
- frame和iframe区别
1.frame不能脱离frameSet单独使用,iframe可以: 2.frame不能放在body中:如下可以正常显示: <!--<body>--> <frameset ...