我必须将一个项目(当时没有设置)从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的新手,这有点让我烦恼...:-)
干杯, 卡罗琳