Как настроить в Yii DI?
У меня есть некий интерфейс. Есть некий, класс, который реализует его. При этом, класс наследуется от BaseObject. Это что то вроде сервиса с бизнес-логикой. Теперь, имея это, хочу заинжектить данную зависимость в конструкторе контроллера через интерфейс.
Смотрю в документацию и не понимаю, где мне этот конфиг писать. Просто кусок какого то кода. К чему он относится - непонятно. Это часть main конфига? Или мне надо отдельно файл создать? Если да, то Yii его "подхватит"? Непонятно.
Ответы (1 шт):
Мммда, короче сдыхает этот юии. Никому он не нужен. Такой простой вопрос - как заинжектить зависимость через интерфейс и ноль реакции. Отвечу сам. Ответ таков:
- Создаем файл di.php например. в нем пишем все, согласно документации.
Примерно так у меня выглядит этот файл:
<?php
Yii::$container->setSingleton('тут неймспейс моего интерфейса',
[
'class' => 'а здесь неймспейс класса, его реализующего',
'prop1' => 'value 1',
'prop2' => 'value 2',
]);
, где propr1 и prop2 - это сетеры в нашем компоненте. Yii транслирует имя сетера. То есть, было setName, а обращаться можно $obj->name. Потому полное имя писать не нужно при конфигурации. Важно, чтоб ваш компонента наследовал хотя бы BaseObject. А то "магия" сетеров работать не будет.
- Ну и дальше в контроллере в конструкторе просто объявляете, зависимость от этого интерфейса
/**
* @var MyLolKekInterface $myLolKekService
**/
private $myLolKekService;
function __construct(MyLolKekInterface $myLolKekService) {
$this->myLolKekService = $myLolKekService;
}
- Не забидьте подключить файл в стартовый скрипт (yii.php). В корне лежит. После всех бутстрапов я так полагаю.