Хотелось бы подтянуть через DI Response, который находится в Yii::$app->response, чтобы он был доступен через Controller::__construct(Response $response).
Если я так делаю, подтягивается какой-то новый Response, а не тот, что используется в Yii::$app->response.
Как это лучше всего решить?
Есть ли какая-то устоявшаяся практика DI-инъекции компонентов из нативного сервис-локатора?
Мне бы хотелось получать ServiceLocator компоненты в конструкторе контроллера, и не пользоваться синтаксисом Yii::$app чтобы код выглядел более универсально.
Спасибо.
Как правильно сделать inject Response в конструктор контроллера?
-
- Сообщения: 102
- Зарегистрирован: 2011.02.04, 12:47
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Как правильно сделать inject Response в конструктор контроллера?
Пока нет такой возможности, у меня есть локально фикс для yii2, но я еще не делал PR.
Если вам горит, то могу сделать, будет возможность инжектить компоненты в конструкторе и экшинах.
Если вам горит, то могу сделать, будет возможность инжектить компоненты в конструкторе и экшинах.
-
- Сообщения: 102
- Зарегистрирован: 2011.02.04, 12:47
Re: Как правильно сделать inject Response в конструктор контроллера?
Спасибо, уважаемый!yiiliveext писал(а): ↑2020.02.10, 22:24 Пока нет такой возможности, у меня есть локально фикс для yii2, но я еще не делал PR.
Если вам горит, то могу сделать, будет возможность инжектить компоненты в конструкторе и экшинах.
А Вы думаете, примут коммит?
Срочной необходимости у меня нет. Просто проект из нескольких частей решили перенести на yii2, и встал вопрос о том, чтобы более переносимый код.
Соответственно, подход, при котором нужные контроллеру компоненты "появятся" в конструкторе, видится мне наиболее удобным.
Пока решил делать так:
- Встроенные компоненты вызывать в конструкторе через Yii::$app->{name}
- Собственные/сторонние компоненты инжектить через контейнер
Соответственно, при возможном переезде можно будет просто переписать конструктор, а при тестировании - подменить компоненты сервис локатора перед созданием экземпляра тестируемого компонента.
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Как правильно сделать inject Response в конструктор контроллера?
Да, мы обсуждали это в соседнем разделе.
-
- Сообщения: 102
- Зарегистрирован: 2011.02.04, 12:47
Re: Как правильно сделать inject Response в конструктор контроллера?
Скажите, а в 2.0.37 это ваш коммит приняли? Там вроде бы как раз появилась возможность инжектить в экшены.