Zend 框架 - 模块系统


Zend Framework 提供了强大的模块系统。该模块系统由三个组件组成。它们如下 -

  • 模块自动加载器- 模块自动加载器负责从各种来源定位和加载模块。它也可以加载打包为Phar 档案的模块。Module Autoloader 的实现位于 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_文件可以用作自动加载模块中可用的类的默认机制,而无需使用zend-modulemanager中可用的高级模块管理器

  • autoload_classmap.php - 返回类名及其相应文件名的数组。

  • autoload_function.php - 返回 PHP 回调。这可以利用 autoload_classmap.php 返回的类。

  • autoload_register.php - 注册由 autoload_function.php 返回的 PHP 回调。

这些自动加载文件不是必需的,但建议使用。在骨架应用程序中,我们没有使用autoload_ files

模块类

Module 类应命名为Module,模块类的命名空间应为Module name。这将有助于 Zend Framework 轻松解析和加载模块。骨架(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()函数并执行必要的步骤。