2

只是把它扔在这里,因为我找不到很多关于这个错误的信息,我花了大约 2 个小时才找到它。掌心

在 container.php -> DBService 中定义为:

    DBServiceInterface::class => function (ContainerInterface $c) {
        return new DBService(
            $c->get('settings.database'), 
            $c->get(SessionInterface::class), 
            $c->get(ValidatorInterface::class)
    );
    },

类型:DI\Definition\Exception\InvalidDefinition 消息:无法解析条目“PVS\HomeController”:无法解析条目“PVS\DBService\DBService”:__construct() 的参数 $settings 没有定义或猜测的值完整定义:对象( 类 = PVS\DBService\DBService 懒惰 = false __construct( $settings = #UNDEFINED# $session = get(PVS\Helpers\Storage\Contracts\SessionInterface) $validator = get(PVS\Validation\Contracts\ValidatorInterface) ) ) 完整定义: Object ( class = PVS\HomeController lazy = false __construct( $container = get(Psr\Container\ContainerInterface) $view = get(Slim\Views\Twig) $router = get(Slim\Router) $flash = get( Slim\Flash\Messages) $session = get(PVS\Helpers\Storage\Contracts\SessionInterface) $db = get(PVS\DBService\DBService) ) ) 文件:

所以我开始在我的容器或 DBService.php 本身中寻找问题。问题实际上出在错误消息第一行的控制器中。

4

2 回答 2

1

HomeController 的构造函数定义为:

public function __construct (ContainerInterface $container, 
    Twig $view, 
    Router $router, 
    Messages $flash, 
    SessionInterface $session, 
    DBService $db) {  <--- Problem here

我将其更改为:

    public function __construct (ContainerInterface $container, 
    Twig $view, 
    Router $router, 
    Messages $flash, 
    SessionInterface $session, 
    DBServiceInterface $db) { <--- 

请注意,我现在调用的是接口而不是具体的实现,它与上面发布的 DI 容器相匹配。

于 2018-04-13T04:49:07.510 回答
0

我有同样的例外,简而言之,我的问题是一个类继承了其父类的构造函数,而父类__constructor不是公共的而是受保护的。

也许这可以节省其他人几个小时的研究时间。

于 2020-05-01T13:42:20.860 回答