PHP-DI не может быть разрешен: запись не может быть разрешена: параметр xxxxxx для __construct() не имеет значения, определенного или предполагаемого Полное определение
Просто выбросил это здесь, потому что я не мог найти много информации об этой ошибке, и мне потребовалось около 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" не может быть разрешена: параметр $settings of __construct() не имеет значения, определенного или предполагаемого Полное определение: Объект ( class = PVS\DBService\DBService lazy = false __construct( $settings = #UNDEFINED# $session = get(PVS\Helpers\Storage\Contracts\SessionInterface) $validator = get(PVS\Validation\Contracts\ValidatorInterface))) Полная определение: объект ( 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. Проблема была на самом деле в контроллере в первой строке сообщения об ошибке.
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, опубликованному выше.
У меня было такое же исключение, и короче говоря, моя проблема заключалась в том, что класс унаследовал конструктор своего родителя и родителя __constructor
не был публичным, но защищенным.
Может быть, это поможет кому-то еще сэкономить часы на исследованиях.