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_ 文件可以用作自动加载模块中可用类的默认机制,而无需使用zend-modulemanager中提供的更高级的模块管理器

  • autoload_classmap.php - 返回一个类名及其对应文件名数组。

  • autoload_function.php - 返回一个 PHP 回调函数。这可以使用 autoload_classmap.php 返回的类。

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

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

模块类

模块类应命名为Module,模块类的命名空间应为模块名。这将帮助 Zend Framework 更轻松地解析和加载模块。框架应用程序 (myapp) 应用程序中的Application 模块代码,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()函数,并执行必要的步骤。

广告