失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Zendframework 模块加载事件触发顺序。

Zendframework 模块加载事件触发顺序。

时间:2020-12-31 05:27:24

相关推荐

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 模块加载事件触发顺序。》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。