здравствуйте, можно где-то почитать или узнать у вас о подключении 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;
.....