PHP-DI 无法解析:条目无法解析:__construct() 的参数 xxxxxx 没有定义或可猜测的值 完整定义
PHP-DI cannot be resolved: Entry cannot be resolved: Parameter xxxxxx of __construct() has no value defined or guessable Full definition
只是把它扔在这里,因为我找不到很多关于这个错误的信息,我花了大约 2 个小时才找到它。 脸掌
在container.php->DBService中定义为:
DBServiceInterface::class => function (ContainerInterface $c) {
return new DBService(
$c->get('settings.database'),
$c->get(SessionInterface::class),
$c->get(ValidatorInterface::class)
);
},
Type: DI\Definition\Exception\InvalidDefinition
Message: Entry "PVS\HomeController" cannot be resolved: Entry "PVS\DBService\DBService" cannot be resolved: Parameter $settings of __construct() has no value defined or guessable Full definition: Object ( class = PVS\DBService\DBService lazy = false __construct( $settings = #UNDEFINED# $session = get(PVS\Helpers\Storage\Contracts\SessionInterface) $validator = get(PVS\Validation\Contracts\ValidatorInterface) ) ) Full definition: 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) ) )
File:
所以我开始在我的容器或 DBService.php 本身中寻找问题。问题实际上出在错误消息第一行的控制器中。
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 容器匹配。
我遇到了同样的异常,简而言之,我的问题是 class 继承了其父级的构造函数,而父级 __constructor
不是 public,而是受保护的。
也许这可以节省其他人的研究时间。
只是把它扔在这里,因为我找不到很多关于这个错误的信息,我花了大约 2 个小时才找到它。 脸掌
在container.php->DBService中定义为:
DBServiceInterface::class => function (ContainerInterface $c) {
return new DBService(
$c->get('settings.database'),
$c->get(SessionInterface::class),
$c->get(ValidatorInterface::class)
);
},
Type: DI\Definition\Exception\InvalidDefinition Message: Entry "PVS\HomeController" cannot be resolved: Entry "PVS\DBService\DBService" cannot be resolved: Parameter $settings of __construct() has no value defined or guessable Full definition: Object ( class = PVS\DBService\DBService lazy = false __construct( $settings = #UNDEFINED# $session = get(PVS\Helpers\Storage\Contracts\SessionInterface) $validator = get(PVS\Validation\Contracts\ValidatorInterface) ) ) Full definition: 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) ) ) File:
所以我开始在我的容器或 DBService.php 本身中寻找问题。问题实际上出在错误消息第一行的控制器中。
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 容器匹配。
我遇到了同样的异常,简而言之,我的问题是 class 继承了其父级的构造函数,而父级 __constructor
不是 public,而是受保护的。
也许这可以节省其他人的研究时间。