首页 > 解决方案 > 将 ZF2 迁移到 ZF3 时出现问题:无法解析服务“ModuleManager”

问题描述

我必须将一个项目(我当时没有设置)从 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);

the$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 很陌生,这让我有点不知所措...... :-)

干杯,卡罗琳

标签: zend-frameworkzend-framework3

解决方案


推荐阅读