PankovAlxndr
@PankovAlxndr
Fullstack web developer

Какая лучшая практика подключения DI в битрикcе?

здравствуйте, можно где-то почитать или узнать у вас о подключении DI в битриксе?

хочу поставить простейший контейнер pimple, https://pimple.symfony.com/

чтобы из него нужные сервисы и классы тянуть, интересует конкретика:
1) где лучше писать (dbconn\init) его инициализацию,
2) как объявлять сам контейнер, чтобы удобно достучаться до него (global)?

сейчас я в dbconn пишу автолоавд композера и переменные окружения загружаю
if (!file_exists($autoloadPathDbconn= realpath(__DIR__).'/../../vendor/autoload.php')) {
    $autoloadPathDbconn= realpath(__DIR__).'/../../vendor/autoload.php';

    require_once($autoloadPathDbconn) ;

    $dotenv = Dotenv\Dotenv::createUnsafeImmutable(realpath(__DIR__).'/../../');
    $dotenv->load();

}

define("BX_USE_MYSQLI", true);
define("DBPersistent", false);
.......


Но что-то мне кажется, что объявлять тут контейнер и забивать его сервисами вообще плохая идея
$container = new Container();
// define some services
$container['session_storage'] = function ($c) {
    return new SessionStorage('SESSION_ID');
};


Вообще я хочу "правильно" найти место и способ инициализации контейнера и дальнейшего его использования во всем моем коде (компоненты, сервисы)

Как насчет init.php?
в каком-нибудь евенте типа:
AddEventHandler("main", "OnBeforeProlog", array("Page", "OnBeforePrologHandler"));


те перед загрузкой пролога я возьму нужные мне переменные окружения, что-то из куки\сессия подтяну по простой логике сконфигуриую свой контейнер, сложу его в глобальную переменную, а уже из компонентов и других файлов буду дергать
Но явное использование глобальных переменных мне что-то вообще не нравится
global $container;
.....
  • Вопрос задан
  • 762 просмотра
Пригласить эксперта
Ответы на вопрос 1
babarun
@babarun Куратор тега 1С-Битрикс
Безумный план моих идей в руках больных людей
Доступен с версии main 20.5.400

Сервис Локатор https://dev.1c-bitrix.ru/learning/course/index.php...

Регистрация локатора https://dev.1c-bitrix.ru/learning/course/index.php...
Ответ написан
Ваш ответ на вопрос

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

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