我在Zend Framework2教程项目中收到一个错误,
Unable to resolve service "Album\Controller\AlbumController" to a factory; are you certain you provided it during configuration?我的Module.php as
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是;
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的新手。只是不知道我做错了什么。如果需要更多的代码,请提出来。
发布于 2017-04-10 19:01:08
您已经为“Controller\AlbumController::class”定义了两个工厂...
一个在module.config.php中-
return [
'controllers' => [
'factories' => [
Controller\AlbumController::class => InvokableFactory::class,
],
],
],第二个在Module.php中-
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”键值。
希望这能有所帮助!
发布于 2017-04-17 10:11:13
我也遇到了同样的问题,还有其他一些相关的问题--直到我终于意识到问题的真正根源:我正在遵循Zend2的教程,而我安装的是Zend3!
如果你有Zend3,一定要使用Zend3的教程,这里是:https://docs.zendframework.com/tutorials/getting-started/overview/
https://stackoverflow.com/questions/43315593
复制相似问题