Zend Framework - 模块系统

  • 简述

    Zend Framework 提供了一个强大的模块系统。模块系统有三个组件。它们如下所示 −
    • 模块自动加载器 − 模块自动加载器负责从各种来源定位和加载模块。它也可以加载打包为Phar 压缩包的模块。模块自动加载器的实现位于 myapp/vendor/zendframework/zend-loader/src/ModuleAutoloader.php
    • 模块管理器 − 模块自动加载器找到模块后,模块管理器将为每个模块触发一系列事件。模块管理器的实现位于 myapp/vendor/zendframework/zendmodulemanager/src/ModuleManager.php
    • 模块管理器侦听器 − 它们可以附加到模块管理器触发的事件。通过附加到模块管理器的事件,他们可以执行从解析和加载模块到为每个模块执行复杂工作的所有操作。
  • MVC Web 模块系统

    Zend Framework 中的MVC Web应用程序通常编写为模块。单个网站可以包含一个或多个按功能分组的模块。面向MVC的模块的推荐结构如下:
    
    module_root/ 
       Module.php 
       autoload_classmap.php 
       autoload_function.php 
       autoload_register.php 
       config/ 
          module.config.php 
       public/ 
          images/ 
          css/ 
          js/ 
       src/ 
          <module_namespace>/ 
          <code files> 
       test/ 
          phpunit.xml
          bootstrap.php 
          <module_namespace>/ 
             <test code files> 
       view/ 
          <dir-named-after-module-namespace>/ 
             <dir-named-after-a-controller>/ 
                <.phtml files>
    
    该结构与上一章中讨论的结构相同,但此处它是通用的。autoload_ files可用作自动加载模块中可用类的默认机制,而无需使用 zend-modulemanr 中提供的高级模块管理器
    • autoload_classmap.php − 返回类名及其相应文件名的数组。
    • autoload_function.php − 返回 PHP 回调。这可以利用autoload_classmap.php返回的类。
    • autoload_register.php − 注册autoload_function.php返回的 PHP 回调。
    这些自动加载文件不是必需的,但建议使用。在骨架应用程序中,我们没有使用autoload_ files
  • Module 类

    模块类应命名为模块,Module类的命名空间应为模块名称。这将有助于Zend Framework 轻松解析和加载模块。skeleton(myapp)应用程序中的应用程序模块代码,myapp/module/Application/src/Module.php 如下 :
    
    namespace Application; 
    class Module { 
       const VERSION = '3.0.2dev'; 
       public function getConfig() { 
          return include __DIR__ . '/../config/module.config.php'; 
       } 
    }
    
    Zend Framework模块管理器将自动调用 getConfig() 函数,并执行必要的步骤。