webarchitect609 / bitrix-neverinclude
自动Bitrix模块加载器帮助您忘记CModule::IncludeModule和Loader::includeModule。
Requires
- php: ^7.2 || ^8.0
- webarchitect609/bitrix-cache: ^1.8
Requires (Dev)
- roave/security-advisories: dev-latest
README
Bitrix模块自动加载器,它可以帮助您忘记CModule::IncludeModule和Loader::includeModule的调用。
如何使用
1 通过composer安装
composer require webarchitect609/bitrix-neverinclude
2 如有必要,在init.php中指定要排除处理的模块列表
\WebArch\BitrixNeverInclude\BitrixNeverInclude::addExcludedModules(['foo.bar',]);
本包与以下版本兼容:> =3.0 andreyryabin/sprint.migration
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没有自动加载函数的机制,此问题无法自动解决。应在调用该模块中声明的函数之前手动连接相应的模块。
与某些模块不兼容
如果Bitrix模块的架构是如此设计的,以至于在include.php
中注册了自带的类自动加载器,那么此类模块很可能与该包不兼容。建议排除此模块的处理(见上文)并按需手动连接。