Как правильно сделать inject Response в конструктор контроллера?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Vasiliy Baukin
Сообщения: 102
Зарегистрирован: 2011.02.04, 12:47

Как правильно сделать inject Response в конструктор контроллера?

Сообщение Vasiliy Baukin »

Хотелось бы подтянуть через DI Response, который находится в Yii::$app->response, чтобы он был доступен через Controller::__construct(Response $response).
Если я так делаю, подтягивается какой-то новый Response, а не тот, что используется в Yii::$app->response.

Как это лучше всего решить?
Есть ли какая-то устоявшаяся практика DI-инъекции компонентов из нативного сервис-локатора?

Мне бы хотелось получать ServiceLocator компоненты в конструкторе контроллера, и не пользоваться синтаксисом Yii::$app чтобы код выглядел более универсально.

Спасибо.
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Как правильно сделать inject Response в конструктор контроллера?

Сообщение yiiliveext »

Пока нет такой возможности, у меня есть локально фикс для yii2, но я еще не делал PR.
Если вам горит, то могу сделать, будет возможность инжектить компоненты в конструкторе и экшинах.
Vasiliy Baukin
Сообщения: 102
Зарегистрирован: 2011.02.04, 12:47

Re: Как правильно сделать inject Response в конструктор контроллера?

Сообщение Vasiliy Baukin »

yiiliveext писал(а): 2020.02.10, 22:24 Пока нет такой возможности, у меня есть локально фикс для yii2, но я еще не делал PR.
Если вам горит, то могу сделать, будет возможность инжектить компоненты в конструкторе и экшинах.
Спасибо, уважаемый!

А Вы думаете, примут коммит?

Срочной необходимости у меня нет. Просто проект из нескольких частей решили перенести на yii2, и встал вопрос о том, чтобы более переносимый код.
Соответственно, подход, при котором нужные контроллеру компоненты "появятся" в конструкторе, видится мне наиболее удобным.

Пока решил делать так:
- Встроенные компоненты вызывать в конструкторе через Yii::$app->{name}
- Собственные/сторонние компоненты инжектить через контейнер

Соответственно, при возможном переезде можно будет просто переписать конструктор, а при тестировании - подменить компоненты сервис локатора перед созданием экземпляра тестируемого компонента.
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Как правильно сделать inject Response в конструктор контроллера?

Сообщение yiiliveext »

Vasiliy Baukin писал(а): 2020.02.11, 12:31 А Вы думаете, примут коммит?
Да, мы обсуждали это в соседнем разделе.
Vasiliy Baukin
Сообщения: 102
Зарегистрирован: 2011.02.04, 12:47

Re: Как правильно сделать inject Response в конструктор контроллера?

Сообщение Vasiliy Baukin »

yiiliveext писал(а): 2020.02.12, 20:50
Vasiliy Baukin писал(а): 2020.02.11, 12:31 А Вы думаете, примут коммит?
Да, мы обсуждали это в соседнем разделе.
Скажите, а в 2.0.37 это ваш коммит приняли? Там вроде бы как раз появилась возможность инжектить в экшены.
Ответить