我创建了一个 Zend 框架模块,它管理一组数据库和文件系统操作。我已经设法获得了 100% 的测试覆盖率(使用模拟数据库),我想测试这个模块与测试环境的集成。
我在 /modules/MyModule/src/MyModule/Service/MyModuleService.php 中有一个 Service 类,它目前没有实现任何接口。文档没有暗示这是我需要做的事情。
class MyModuleService
{
public function doA(){...}
public function doB(){...}
.....
}
我没有从默认应用程序框架更改应用程序文件夹中的任何内容。我已经编写了模型类,它们可以进行大量的数据库和文件系统操作。Service 类最终会触发这些操作。根据教程完成基本配置后,当我尝试在 ZF 文件系统之外访问它们时,ZF 似乎没有注册我的类。
//dependencies for auto loader
require_once 'Zend/Loader/AutoloaderFactory.php';
use Zend\Loader\AutoloaderFactory;
//NEW registering the autoloader (as per Tomdarkness' response)
Zend\Loader\AutoloaderFactory::factory(array(
'Zend\Loader\StandardAutoloader' => array(
'autoregister_zf' => TRUE,
'namespaces' => array(
'MyModule'=> '/path/to/zendframework/module/src/MyModule',
)
)
)
);
//what factories are auto-loaded?
var_export(AutoloaderFactory::getRegisteredAutoloaders());
var_export 现在返回以下内容:
array(
'Zend\\Loader\\StandardAutoloader' => Zend\Loader\StandardAutoloader::__set_state(
array('namespaces' =>
array('Zend\\' => '/usr/lib/zendframework/library/Zend/',
'MyModule\\' => '/path/to/zendframework/module/src/MyModule/',
), 'prefixes' => array(),
'fallbackAutoloaderFlag' => FALSE,
)
)
);
在我的 module.php 中,我确实将服务声明如下:
/* Configure DB Service Managers */
public function getServiceConfig()
{
return array(
// ...
'invokables' => array(
'myModuleService'=> function ($sm){
$myModuleTable = $sm->get('MyModuleTable\Model\MyModuleTable');
return new MyModuleService($myModuleTable);
}
),
}
我现在如何从这个自动加载的类中实例化一个 MyModuleService ?