Страница 1 из 1

Почему Контейнер зависимостей не видит параметр в ассоциативном массиве?

Добавлено: 2021.10.12, 13:54
MarkL
Ошибка:
Exception 'yii\base\InvalidConfigException' with message 'Missing required parameter "location" when instantiating "shop\manage\payment\cloudPayments\CloudPaymentsPaymentCreator".'
Возникает при извлечении класса:

Код: Выделить всё

\Yii::$container->get($class, [], $params); // в $class - CloudPaymentsPaymentCreator
Конструктор класса CloudPaymentsPaymentCreator:

Код: Выделить всё

class CloudPaymentsPaymentCreator implements PaymentCreator
{
    const LOCATION_USA = "USA";
    const LOCATION_EU = "EU";

    private $location;

    public function __construct($location)
    {
        $this->location = $location;
    }

Распечатка $params

Код: Выделить всё

array(1) {
  ["location"]=>
  string(2) "EU"
}
----
Как видно: параметр "location" есть в массиве $params, но почему-то DI этого не видит. Что я делаю не так?

Re: Почему Контейнер зависимостей не видит параметр в ассоциативном массиве?

Добавлено: 2021.10.12, 15:02
ElisDN

Код: Выделить всё

Yii::$container->get($class, ['EU']);

Re: Почему Контейнер зависимостей не видит параметр в ассоциативном массиве?

Добавлено: 2022.01.16, 17:47
MarkL
ElisDN писал(а): 2021.10.12, 15:02

Код: Выделить всё

Yii::$container->get($class, ['EU']);
Хотелось бы решить проблему, а не найти альтернативу :)

+Порядок параметров часто может меняться, сложнее отслеживать побочные эффекты, чем ассоциативный ключ, как по мне.

Re: Почему Контейнер зависимостей не видит параметр в ассоциативном массиве?

Добавлено: 2022.01.16, 20:51
ElisDN

Код: Выделить всё

\Yii::$container->get($class, $params);

Re: Почему Контейнер зависимостей не видит параметр в ассоциативном массиве?

Добавлено: 2022.01.29, 14:28
MarkL
ElisDN писал(а): 2022.01.16, 20:51

Код: Выделить всё

\Yii::$container->get($class, $params);
Ошибка:

Код: Выделить всё

Exception 'yii\base\InvalidConfigException' with message 'Missing required parameter "location" when instantiating "shop\manage\payment\cloudPayments\CloudPaymentsPaymentCreator".'
$params:

Код: Выделить всё

array(1) {
  ["location"]=>
  string(3) "USA"
}
Конструктор CloudPaymentsPaymentCreator:

Код: Выделить всё

    private $location;

    public function __construct($location)
    {
        $this->location = $location;
    }

Re: Почему Контейнер зависимостей не видит параметр в ассоциативном массиве?

Добавлено: 2022.01.29, 14:37
MarkL
Но если предварительно использовать set(), то сработает самый первый вариант:

Код: Выделить всё

\Yii::$container->set($class, [], $params);
return \Yii::$container->get($class);