zoukankan      html  css  js  c++  java
  • 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):所有的模块被加载后,本事件被触发。默认情况下ZendModuleManagerListenerConfigListener以1000的优先级监听本事件,并且合并所有的配置。

    4、  loadModules.post(ModuleEvent::EVENT_LOAD_MODULES_POST):本事件在模块完成后被module manager触发,允许任何监听器执行工作。比如上面的ConfigListener。用来确保所有的模块都加载完成。

      每一次页面请求都会调用init()和onBootstrap(),所以保证init()和onBootstrap()轻量实现,不要让这两个方法做大量的工作,一般和事件相关的任务可以交给这两个方法。其余的如logger或者mailer和数据库相关的交给serviceManager。

      模块代码不要在模块目录下进行任何写操作,如果非得要有写操作,请写入其他目录,以保证模块目录的一致性。

      为了防止模块名冲突,可以添加前缀。

      模块管理器使用ZendLoaderModuleAutoloader来自动加载web application里的所有要求加载的模块。一般情况ModuleManager里的DefaultListenerAggregate将ModuleAutoloader设置为监听器,所以ModuleAutoloader会自动加载,我们所要做的就是提供一组模块的路径(一般相对于Application的根目录)。因此在public/index.php中我们添加了chdir(dirname(__DIR__))语句。

    (这一部分与实际代码有出入,以实际代码为准)

      可以使用PHAR对模块打包,但尽量不要使用压缩类型,会增加CPU压力。

      ModuleManager是作为一个服务来运行的,由ServiceManager调度。所以有必要看看ServiceManager。

      每一个模块的唯一入口时Module类,可以重载或者添加额外的application配置,执行初始化:注册autoloader、services、event listeners、声明依赖。

  • 相关阅读:
    全国疫情数据的爬取
    Spring_声明式事务
    第三周总结
    Spring_整合Mybatis
    Oracle AWR内容详解 参考学习钱若梨花落
    查看Oracle某时刻的客户端IP连接情况 参考学习钱若梨花落
    oracle Logminer 日志挖掘 参考学习钱若离花落
    静默升级oracle 11g (从11.2.0.1升级到11.2.0.4)
    oracle RAC集群启动和关闭
    856. Score of Parentheses
  • 原文地址:https://www.cnblogs.com/san-fu-su/p/5690163.html
Copyright © 2011-2022 走看看