@MarkLb

Почему Yii2 не может внедрить зависимость, и выбрасывает NotInstantiableException?

Exception 'yii\di\NotInstantiableException' with message 'Can not instantiate core\lib\goodsProvider\GoodsBuffer.'

Есть класс GoodsBuffer - сам он без конструктора:
kiss_11kb.1640255549.png

Его надо прокинуть в качестве зависимости в класс JackFinder, GoodsBuffer идёт 2-ым параметром:
kiss_7kb.1640255614.png

Получаю исключение: Exception 'yii\di\NotInstantiableException' with message 'Can not instantiate core\lib\goodsProvider\GoodsBuffer.'
Exception 'yii\di\NotInstantiableException' with message 'Can not instantiate core\lib\goodsProvider\GoodsBuffer.'

in E:\Program\OpenServer\domains\work\martashop.loc\vendor\yiisoft\yii2\di\Container.php:543

Stack trace:
#0 E:\Program\OpenServer\domains\work\martashop.loc\vendor\yiisoft\yii2\di\Container.php(386): yii\di\Container->getDependencies('core\\lib\\jack...')
#1 E:\Program\OpenServer\domains\work\martashop.loc\vendor\yiisoft\yii2\di\Container.php(171): yii\di\Container->build('core\\lib\\jack...', Array, Array)
#2 E:\Program\OpenServer\domains\work\martashop.loc\core\lib\goodsProvider\ProviderFactory.php(81): yii\di\Container->get('core\\lib\\jack...')
#3 E:\Program\OpenServer\domains\work\martashop.loc\core\lib\goodsProvider\ProviderFactory.php(65): core\lib\goodsProvider\ProviderFactory->creator('jack', Array, 'core\\lib\\goodsP...')
#4 E:\Program\OpenServer\domains\work\martashop.loc\core\services\goods\import\GoodsUpdater.php(28): core\lib\goodsProvider\ProviderFactory->createFinderClass('jack')
#5 E:\Program\OpenServer\domains\work\martashop.loc\console\controllers\GoodsController.php(77): core\services\goods\import\GoodsUpdater->update(Object(core\entities\Goods\Goods))
#6 [internal function]: console\controllers\GoodsController->actionUpdate()
#7 E:\Program\OpenServer\domains\work\martashop.loc\vendor\yiisoft\yii2\base\InlineAction.php(57): call_user_func_array(Array, Array)
#8 E:\Program\OpenServer\domains\work\martashop.loc\vendor\yiisoft\yii2\base\Controller.php(181): yii\base\InlineAction->runWithParams(Array)
#9 E:\Program\OpenServer\domains\work\martashop.loc\vendor\yiisoft\yii2\console\Controller.php(184): yii\base\Controller->runAction('update', Array)
#10 E:\Program\OpenServer\domains\work\martashop.loc\vendor\yiisoft\yii2\base\Module.php(534): yii\console\Controller->runAction('update', Array)
#11 E:\Program\OpenServer\domains\work\martashop.loc\vendor\yiisoft\yii2\console\Application.php(181): yii\base\Module->runAction('goods/update', Array)
#12 E:\Program\OpenServer\domains\work\martashop.loc\vendor\yiisoft\yii2\console\Application.php(148): yii\console\Application->runAction('goods/update', Array)
#13 E:\Program\OpenServer\domains\work\martashop.loc\vendor\yiisoft\yii2\base\Application.php(392): yii\console\Application->handleRequest(Object(yii\console\Request))
#14 E:\Program\OpenServer\domains\work\martashop.loc\yii(23): yii\base\Application->run()
#15 {main}


1. Namespace указан верно в соответствии со стандартом авто-загрузчика:
kiss_11kb.1640255778.png

2. Директорию core авто-загрузчик тоже должен видеть: в ней даже лежит FinderInterface, который имплементирует JackFinder.

В чём может быть проблема?
  • Вопрос задан
  • 614 просмотров
Решения вопроса 1
@MarkLb Автор вопроса
Отбой. Догадался вызвать класс без DI, через new:
public function __construct()
    {
        $this->buffer = new GoodsBuffer();
    }


Получил ошибку от PHP. Забыл версию в консоли сменить:
Exception 'ParseError' with message 'syntax error, unexpected 'array' (T_ARRAY), expecting function (T_FUNCTION) or const (T_CONST)'


Надо было додуматься вызвать через new сразу - сэкономил бы час времени.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы