Модуль Битрикс: автозагрузка классов через Loader::registerAutoLoadClasses
Регистрация автозагрузки классов модуля в include.php по пути от корня модуля. По документации Битрикс — без require_once и сломанных путей при переносе.
Как использовать
- В корне модуля создайте lib/ с неймспейсами (например lib/Service/DateProvider.php → Vendor\SimpleModule\Service\DateProvider).
- В include.php модуля вызовите Loader::registerAutoLoadClasses(MODULE_ID, массив класс => путь от корня модуля).
- Путь указывайте от корня модуля, без ведущего слеша (например lib/Service/DateProvider.php).
- В коде используйте use и класс по неймспейсу; не подключайте файлы через 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').