Автозагрузка классов
Автозагрузка классов D7 по стандарту PSR-4 активируется только в момент подключения соответствующего модуля через Loader::includeModule(). Если класс модуля вызывается в фоновом скрипте, агенте или консольной команде до подключения модуля, PHP выбросит ошибку Class not found.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Стандарт PSR-4
-
2
Регистрация namespace модуля
-
3
Автозагрузчик Битрикс
Материалы
Официальная документация
-
Composer Новая дока
Проверь себя
Класс PriceCalculator из пространства Vendor Shop лежит в /local/modules/vendor.shop/lib/Service/PriceCalculator.php, но PHP пишет «Class not found». Где искать причину?
Проверьте, вызван ли Loader::includeModule('vendor.shop') до первого обращения к классу. Пространство имён Vendor Shop регистрируется на папку lib только внутри includeModule(), а модуль должен быть установлен — иначе метод вернёт false и ничего не зарегистрирует.
Почему класс UserTable главного модуля находится в файле lib/user.php, а не lib/usertable.php, и как это работает у вас?
Loader::autoLoad() для классов с суффиксом Table дополнительно пробует файл без этого суффикса. В своём модуле можно класть OrderTable в lib/order.php, но новый код лучше держать строго по PSR-4, чтобы IDE и Composer его тоже находили.
Чем registerAutoLoadClasses() отличается от registerNamespace() и когда первый ещё нужен?
registerAutoLoadClasses() задаёт прямую карту класс → файл и проверяется первым, до поиска по namespace. Он нужен для старых классов без пространства имён и для файлов, где несколько классов в одном файле. Для нового кода достаточно PSR-4.
Composer установлен, vendor/autoload.php есть, но классы библиотеки не находятся на сайте. Что забыли?
Секцию composer с config_path в .settings.php: Loader::includeComposerAutoload() подключает vendor/autoload.php только по пути из неё. Без секции автозагрузчик Composer в хите не участвует.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить