无法解析PHP-DI:无法解析条目:__construct()的参数xxxxxx没有定义或可猜测的值完全定义

时间:2018-04-13 04:46:15

标签: php dependency-injection php-di

在这里抛出这个因为我无法找到关于此错误的大量信息,我花了大约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没有定义或可猜测的值完全定义:Object(class = PVS \ DBService \ DBService lazy = 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本身中查找问题。问题实际上是在错误消息第一行的控制器中。

2 个答案:

答案 0 :(得分:0)

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) { <--- 

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

答案 1 :(得分:0)

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

也许可以节省别人的研究时间。