webarchitect609 / bitrix-neverinclude

自动Bitrix模块加载器帮助您忘记CModule::IncludeModule和Loader::includeModule。

v1.1.2 2024-07-10 10:05 UTC

This package is auto-updated.

Last update: 2024-09-10 10:31:36 UTC


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中注册了自带的类自动加载器,那么此类模块很可能与该包不兼容。建议排除此模块的处理(见上文)并按需手动连接。