将ZF2迁移到ZF3时出现问题:无法解析服务“ ModuleManager”

时间:2018-09-12 08:56:35

标签: zend-framework zend-framework3

我必须将一个项目(当时没有设置)从Zend Framework 2迁移到Zend Framework 3,并且遇到一些问题: ServiceManager已扩展为可以执行一些自定义操作,并且在功能__construct()中,它会中断:

//Zend/Mvc/Application
$this->setFactory('MvcApplication', function ($serviceManager)
{
    $serviceManager->get('ModuleManager')->loadModules();
    return $serviceManager->get('Application')->bootstrap();                
});

“ PHP致命错误:未捕获Zend \ ServiceManager \ Exception \ ServiceNotFoundException:无法将服务“ ModuleManager”解析为工厂;您确定是在配置过程中提供的吗?“

我没有将自动加载添加到composer.json,也没有更改为PSR-4标准,因为我建议这样做,但这不是必需的。 我在composer.json中有模块管理器:

"zendframework/zend-servicemanager": "3.3.0",
"zendframework/zend-modulemanager": "2.8.0",

ServiceManager的设置如下:

//Add MVC configuration
$mvcServiceManager = new \Zend\ServiceManager\ServiceManager(isset($configuration['mvc']['service_manager']) ? $configuration['mvc']['service_manager'] : array());
$mvcServiceManager->setService('ApplicationConfig', $configuration['mvc']);
$mvcServiceManager->setService('ParentServiceManager', $this);

$configuration['mvc']是一个看起来像这样的数组:

$configuration['mvc']['module_listener_options']['module_paths'][] = $configuration['path']['modules'];
$configuration['mvc']['modules'][] = 'AppName\Module\Error';
$configuration['mvc']['modules'][] = 'AppName\Module\Auth';
$configuration['mvc']['modules'][] = 'AppName\Module\CMS';
...etc  

在文件autoload.php中,我有:

//Add composer classes
include_once(__DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php');

//Autoload non composer classes
Zend\Loader\AutoloaderFactory::factory(
    array(
        'Zend\Loader\StandardAutoloader' => array(
            'namespaces' => array(
                'AppName' => __DIR__ . DIRECTORY_SEPARATOR . 'AppName'
            )
        )
    )
);

有人可以向正确的方向推动我吗?我必须在composer.json中使用自动加载功能切换到psr-4吗?还是这是另一个问题?

非常感谢您的帮助!我是ZF的新手,这有点让我烦恼...:-)

干杯, 卡罗琳

0 个答案:

没有答案