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,模块类的命名空间应为 Module name。这将有助于 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() 函数并执行必要的步骤。