Модуль Битрикс: автозагрузка классов через Loader::registerAutoLoadClasses
Регистрация автозагрузки классов модуля в include.php по пути от корня модуля. По документации Битрикс — без require_once и сломанных путей при переносе.
Закрывает боль: в модуле подключают классы через require_once с относительными путями — при смене места вызова или структуры папок получаем «Failed opening required». По документации Битрикс классы модуля регистрируют через Loader::registerAutoLoadClasses() в include.php; пути задаются от корня модуля.
Структура:
/local/modules/vendor.simplemodule/
├── include.php
└── lib/
└── Service/
└── DateProvider.php
include.php модуля:
<?php
use Bitrix\Main\Loader;
Loader::registerAutoLoadClasses(
'vendor.simplemodule',
[
'Vendor\\SimpleModule\\Service\\DateProvider' => 'lib/Service/DateProvider.php',
'Vendor\\SimpleModule\\EventHandler' => 'lib/EventHandler.php',
]
);
Класс lib/Service/DateProvider.php:
<?php
namespace Vendor\SimpleModule\Service;
class DateProvider
{
public static function getCurrentDate(): string
{
return date('d.m.Y');
}
}
Использование в компоненте или другом коде:
use Vendor\SimpleModule\Service\DateProvider;
$date = DateProvider::getCurrentDate();
Важно: Первый аргумент — MODULE_ID (строка). Ключи массива — полные имена классов с экранированными обратными слэшами (Vendor\SimpleModule\Service\DateProvider). Значения — пути от корня модуля, без __DIR__ и без ведущего слеша. После установки модуля автозагрузка доступна везде, где подключают модуль через Loader::includeModule('vendor.simplemodule').