Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Автозагрузчик модулей Битрикс, который поможет вам забыть про вызовы CModule::IncludeModule и Loader::includeModule

Как использовать

1 Установите через composer:

composer require webarchitect609/bitrix-neverinclude

2 Если необходимо, то в init.php укажите список модулей, которые следует исключить из обработки данного автолоадера:

\WebArch\BitrixNeverInclude\BitrixNeverInclude::addExcludedModules(['foo.bar',]);

Данный пакет совместим с новыми версиями andreyryabin/sprint.migration: >=3.0

3 В init.php после подключения vendor/autoload.php добавьте вызов:

\WebArch\BitrixNeverInclude\BitrixNeverInclude::registerModuleAutoload();

Больше подключать модули не нужно, за исключением некоторых ситуаций, описанных ниже.

Особенности реализации

1 Классы не из глобального namespace разбираются динамически и превращаются в название модуля, который тут же подключается.

2 Классы из глобальной области проверяются по маппингу "имя класса => имя модуля", для вычисления которого делается подключение всех установленных в системе модулей и производится сбор внутренних данных, которые потом кешируются.

Известные ограничения

При установке нового модуля

Если происходит установка нового модуля, использующего классы в глобальной области, кеш маппинга "имя класса => имя модуля" будет неактуальным. Рекомендуется сбросить его по тегу следующим образом:


$tagCache = \Bitrix\Main\Application::getInstance()->getTaggedCache();
$tagCache->clearByTag(\WebArch\BitrixNeverInclude\BitrixNeverInclude::CACHE_TAG);

После сброса кеша рекомендуется вызвать

\WebArch\BitrixNeverInclude\BitrixNeverInclude::getClassMapping();

, чтобы при следующем хите уже существовал маппинг "имя класса => имя модуля".

Функции в модулях

В некоторых модулях объявляются функции, которые недоступны без подключения модуля. Например, функция SaleFormatCurrency недоступна без подключения модуля sale. Из-за того, что в php нет механизма автозагрузки функций, эта проблема не может быть решена автоматически. Следует вручную подключать соответствующий модуль перед вызовом функции, объявленной в этом модуле.

Несовместимость с некоторыми модулями

Если архитектура модуля Битрикс сделана таким образом, что в include.php происходит регистрация своего автозагрузчика классов, то очень вероятна несовместимость такого модуля с данным пакетом. Следует исключить этот модуль из обработки(см. выше) и подключать его по необходимости вручную.

About

Битрикс - автоматическое подключение модулей

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages