1

我想知道是否有任何方法可以手动加载模块。这意味着,假设我有一个名为的模块Application和另一个名为Clients. 我不希望Clients模块进入application.config.php文件并自动加载,无论应用程序偏好如何。我应该从我的第一个名为Application. 它也可以来自“模块”目录以外的任何自定义位置。

欢迎任何体面的答案。谢谢极客。

4

2 回答 2

1

不,Zend Framework 2 不允许您从另一个模块加载模块。这不是专门为防止不需要的副作用而提供的。您必须指定两件事:

  1. 模块的加载路径;加载模块时在哪里查看
  2. 您要加载的模块;您登记的模块已启用

您不能拥有未在应用程序配置中列出但无论如何都已加载的模块。

于 2014-07-04T06:33:17.943 回答
0

这是实现所需要求的解决方法。我把它贴在这里,以便任何人发现这个问题都可以从中受益。

这个概念实际上是将经过验证的模块与自定义类处理的主要配置一起传递。这样它就会被zend的本地模块管理器自动加载。

1.首先将模块的新路径添加到主配置文件中。

<?php return array( // other options 'module_listener_options' => array( 'module_paths' => array( './module', './vendor', './my_module_path', // << HERE WE ADD THE DESIRED MODULE PATH ), // ....... );

2.在我们的主模块中创建一个类函数来检查哪些模块被启用并获取列表

<?php namespace Application; class MyModuleManager { public static function AddCustomModules(array $modules) { // find and create the available module array $custom_modules; return array_merge ($modules, $custom_modules); } }

3.Alterindex.php位于public目录中的文件以使用新加载的模块列表注入修改后的配置。

//
// Setup autoloading
require 'init_autoloader.php';

// Run the application!
Zend\Mvc\Application::init(_my_get_configs(require 'config/application.config.php'))->run();

// Custom function to process custom modules
function _my_get_configs(array $config) {
    if (class_exists ('Application\MyModuleManager')) {
        $module_merged = \Application\MyModuleManager::AddCustomModules($confi['modules']);
        $config['modules'] = $module_merged;
    }
    return $config;
}

以上只是我实现和工作的概念的抽象。我不能发布完整的代码,所以只能从上面获取概念。如果有人可以改进上述架构,请提出建议。

于 2014-07-06T06:44:40.770 回答