首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将服务"Album\Controller\AlbumController“解析到工厂;是否确实在配置过程中提供了该服务?在Zend Framework 2中

问无法将服务"Album\Controller\AlbumController“解析到工厂;是否确实在配置过程中提供了该服务?在Zend Framework 2中
EN

Stack Overflow用户
提问于 2017-04-10 13:31:21
回答 2查看 9.5K关注 0票数 0

我在Zend Framework2教程项目中收到一个错误,

代码语言:javascript
复制
Unable to resolve service "Album\Controller\AlbumController" to a factory; are you certain you provided it during configuration?

我的Module.php as

代码语言:javascript
复制
namespace Album;

use Zend\ModuleManager\Feature\ConfigProviderInterface;

class Module implements ConfigProviderInterface
{
public function getConfig()
{
    return include __DIR__ . '/../config/module.config.php';
}

public function getServiceConfig()
{
    return [
        'factories' => [
            Model\AlbumTable::class => function($container) {
                $tableGateway = $container->get(Model\AlbumTableGateway::class);
                return new Model\AlbumTable($tableGateway);
            },
            Model\AlbumTableGateway::class => function ($container) {
                $dbAdapter = $container->get(AdapterInterface::class);
                $resultSetPrototype = new ResultSet();
                $resultSetPrototype->setArrayObjectPrototype(new Model\Album());
                return new TableGateway('album', $dbAdapter, null, $resultSetPrototype);
            },
        ],
    ];
}

public function getControllerConfig()
{
    return [
        'factories' => [
            Controller\AlbumController::class => function($container) {
                return new Controller\AlbumController(
                    $container->get(Model\AlbumTable::class)
                );
            },
        ],
    ];
}
}

我的module.config.php是;

代码语言:javascript
复制
namespace Album;

use Zend\Router\Http\Segment;

//use Zend\ServiceManager\Factory\InvokableFactory;

return [
'controllers' => [
    'factories' => [
        Controller\AlbumController::class => InvokableFactory::class,
    ],
],

'router' => [
    'routes' => [
        'album' => [
            'type'    => Segment::class,
            'options' => [
                'route' => '/album[/:action[/:id]]',
                'constraints' => [
                    'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'id'     => '[0-9]+',
                ],
                'defaults' => [
                    'controller' => Controller\AlbumController::class,
                    'action'     => 'index',
                ],
            ],
        ],
    ],
],

'view_manager' => [
    'template_path_stack' => [
        'album' => __DIR__ . '/../view',
    ],
],
];

我是Zend Framework的新手。只是不知道我做错了什么。如果需要更多的代码,请提出来。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-10 19:01:08

您已经为“Controller\AlbumController::class”定义了两个工厂...

一个在module.config.php中-

代码语言:javascript
复制
return [
    'controllers' => [
        'factories' => [
             Controller\AlbumController::class => InvokableFactory::class,
        ],
     ],
],

第二个在Module.php中-

代码语言:javascript
复制
public function getControllerConfig()
{
    return [
        'factories' => [
            Controller\AlbumController::class => function($container) {
                return new Controller\AlbumController(
                    $container->get(Model\AlbumTable::class)
                );
            },
        ],
    ];
}

它们都是相互冲突的。可调用的工厂用于没有任何依赖关系的类。在本例中,"AlbumController“的依赖项是"AlbumTable",所以第二个选项看起来就是您想要的那个。

因此,简而言之,从module.config.php中的数组中删除“controllers”键值。

希望这能有所帮助!

票数 5
EN

Stack Overflow用户

发布于 2017-04-17 10:11:13

我也遇到了同样的问题,还有其他一些相关的问题--直到我终于意识到问题的真正根源:我正在遵循Zend2的教程,而我安装的是Zend3!

如果你有Zend3,一定要使用Zend3的教程,这里是:https://docs.zendframework.com/tutorials/getting-started/overview/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43315593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档