从非Zend应用程序访问ZF2模块服务

时间:2014-03-19 16:46:51

标签: php zend-framework2

我正在构建一个包含许多模块的Zend应用程序。我想在其他未使用Zend Framework的项目中重用其中一些模块。

我在非Zend测试脚本中使用了init_autoloader.php,可以按预期访问Zend Framework类。

我也可以设置自动加载器直接从我的模块加载类。

我的目标是加载模块并从getServiceConfig()函数的Module类访问其服务。

使用ModuleManager,我已经设置了DefaultListeners并可以加载模块。

use Zend\ModuleManager\Listener;
use Zend\ModuleManager\ModuleManager;

chdir(dirname(__DIR__));
// Instantiate and configure the default listener aggregate
$listenerOptions = new Listener\ListenerOptions(array(
    'module_paths' => array(
        './module',
        './vendor'
    )
));
$defaultListeners = new Listener\DefaultListenerAggregate($listenerOptions);
// Instantiate the module manager
$moduleManager = new ModuleManager(array(
    'Group',
));
// Attach the default listener aggregate and load the modules
$moduleManager->getEventManager()->attachAggregate($defaultListeners);
$moduleManager->loadModules();

我想要做的是实例化一个ServiceManager实例,并且能够在应用程序中从模块中获取服务。

非常感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以像这样创建服务管理器:

use Zend\Mvc\Service\ServiceManagerConfig;
use Zend\ServiceManager\ServiceManager;

/* Insert your code to setup whatever autoloader you want */

$configuration = include 'config/application.config.php';

$serviceManager = new ServiceManager(new ServiceManagerConfig());
$serviceManager->setService('ApplicationConfig', $configuration);

$serviceManager->get('ModuleManager')->loadModules();

如果您只想使用特定模块,请创建仅包含所需模块的config/application.config.php副本。注意,您可以直接将配置数组放入上面代码中的$configuration,而不是根据需要包含文件。