ServiceNotFoundException无法将服务“路由器”解析为工厂Zend Framework

时间:2018-04-02 10:16:31

标签: php zend-framework2

我是Zend Framework的新手。当我运行程序时,我得到以下异常:

Error Image

我已经尝试了堆栈溢出和其他资源以及其他方法的所有解决方案。请帮帮我们。

配置/ modules.config.php

<?php
return [
    'Zend\ServiceManager\Di',
    'Zend\Session',
    'Zend\Mvc\Plugin\Prg',
    'Zend\Mvc\Plugin\Identity',
    'Zend\Mvc\Plugin\FlashMessenger',
    'Zend\Mvc\Plugin\FilePrg',
    'Zend\Mvc\I18n',
    'Zend\Mvc\Console',
    'Zend\Log',
    'Zend\Form',
    'Zend\db',
    'Zend\Cache',
    'Zend\Router',
    'Zend\Validator',
    'ZendDeveloperTools',
    'Application',
    'Album'
];

?>

1 个答案:

答案 0 :(得分:0)

我认为该设置与Zend Framework 3的设置非常相似。由于我使用它并因此使用该代码,我将向您展示该设置。

您提供的modules.config.php文件示例与您为我们截屏(ted?)的错误消息不符。

如果无法加载通过modules.config.php文件请求的模块,则会出现另一个错误,即:

  

致命错误:未捕获的Zend \ ModuleManager \ Exception \ RuntimeException:无法初始化模块(DEMO \ NOT \ FOUND \ MODULE)。在第203行的C:\ xampp \ htdocs \ DEMO_PROJECT \ vendor \ zendframework \ zend-modulemanager \ src \ ModuleManager.php

糟糕

Kwido在下面的评论中正确地指出,这个答案的其余部分与OP的问题无关。将它留在这里,万一其他人觉得它很方便。

我认为你正在做的是尝试从某个地方获取Router课程(基于这些内容:$serviceLocator->get(Router::class)),基于这样一个事实{{1}您的供应商文件夹中的文件夹和浮动的zendframework/zend-router命名空间。

但是,在Zend\Router模块中,您会找到zend-router类(ConfigProvider)。在这里,您将找到此函数,它返回配置:

vendor/zendframework/zend-router/src/ConfigProvider.php

此方法初始化/** * Provide default container dependency configuration. * * @return array */ public function getDependencyConfig() { return [ 'aliases' => [ 'HttpRouter' => Http\TreeRouteStack::class, 'router' => RouteStackInterface::class, 'Router' => RouteStackInterface::class, 'RoutePluginManager' => RoutePluginManager::class, ], 'factories' => [ Http\TreeRouteStack::class => Http\HttpRouterFactory::class, RoutePluginManager::class => RoutePluginManagerFactory::class, RouteStackInterface::class => RouterFactory::class, ], ]; } (更深入了解事件here)。

以下行允许您执行类似On bootstrap(在ZF2中)或$this->getServiceManager()->get('Router')(在ZF3中)的操作:

$container->get('Router')

但是,你不能'router' => RouteStackInterface::class, 'Router' => RouteStackInterface::class, !这是因为它只被注册为别名!您必须通过字符串$serviceLocator->get(Router::class)router获取它。