Насколько хороша либо плоха сильная связанность в Yii, и возможно ли сделать подобие Service Locator для Yii?

%D0%A5%D0%B8%D1%82%D1%80%D0%B5%D1%86-%D0

Здравствуйте, у меня вопрос по Yii. Насколько хорошо либо плохо сильная связанность в Yii, и возможно ли сделать подобие Service Locator для Yii?. До этого работал с Magento и возможность переопределять сущности для всех модулей системы очень понравилось. Сейчас пробую реализовать модульную структуру для Yii, вынести конфигурации в модули для удобства написания, теперь дело уперлось в Service Locator. Есть ли готовые решения либо концепции решений, и нужно ли мне это вообще ?) Возможно я не в ту сторону смотрю? По моей логике Service Locator нужен ибо одно изменение для всех связующих это очень полезно.

Сразу скажу что в Yii я пока не силен, так что просьба сильно не пинать. Любая критика воспринимается хорошо. Спасибо
  • Вопрос задан
  • 3643 просмотра
Пригласить эксперта
Ответы на вопрос 4
fornit1917
@fornit1917
Не компонент, а например модель для модуля User, при этом чтобы все модули которые используют эту модель получали уже новый класс.


Модель - это частный случай компонента. Для них тоже можно использовать механизм DI.
Например вместо
$u = new User();
можно везде писать
$u = Yii::cretateComponent($configManager->getConfig('user'));

где $configManager - это какой-то ваш достаточно простой объект, который загрузит из единого конфига информацию по слову "user" и вернет ее в виде массива. В этом массиве можно задать поле class - собственно экземпляр этого класса и будет создан функцией Yii::createComponent.
Ответ написан
MrLoki
@MrLoki
I will.
SL или DiC, для Yii не подходит, об этом говорили создатели фреймворка, в том числе на хабре. Для внешней логики можно накрутить что-то свое.
Но внутри
wbP2PVdFiMqkfBqjE0RyS8E6m.png

Если смотрите на DiC или SL, попробуйте Symfony2, Zend 2, Laravel 4 или что-то еще. У Yii свой путь, привыкайте к глобальному доступу.

Отвечая на вопрос разруливания компонентов.
Конфигурируем в секции components и, получаем доступ через Yii::app(). Где угодно.

Модули, есть. Но работают странно, и мы с ними друг-друга не поняли. Попробуйте вы.
Ответ написан
SamDark
@SamDark
Yii2 core team
В бету 2.0 вошёл контейнер DI и сервис локатор.
Ответ написан
miraage
@miraage
Старый прогер
То есть Вы хотите переопределить компонент? В чем проблема? Указываете нужный класс в конфиге, в разделе components.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы