Битрикс имеет собственный автолоадер, который конфликтует с Composer при неправильной настройке. Разберём как правильно подключить Composer-пакеты в Битрикс-проект, не ломая ядро и не получая ошибки класса Cannot redeclare.
Почему нельзя просто поставить Composer в корень
Если запустить composer install в корне сайта, автозагрузчик Composer начнёт конфликтовать с автолоадером Битрикс. Также vendor/ окажется в публичном доступе, что небезопасно.
Правильное место для Composer — директория /local/.
Структура проекта
/local/
composer.json
composer.lock
vendor/ ← автозагрузчик и пакеты
lib/ ← собственные классы
/bitrix/
php_interface/
init.php ← подключаем vendor/autoload.php здесь
Инициализация Composer
cd /home/bitrix/www/local composer init # Отвечаем на вопросы: namespace, описание # Vendor не должен быть в web root, но /local/ закрыт через nginx/apache
Пример composer.json
{
"name": "mycompany/bitrix-local",
"description": "Local modules and libraries",
"require": {
"guzzlehttp/guzzle": "^7.0",
"vlucas/phpdotenv": "^5.5",
"monolog/monolog": "^3.0"
},
"autoload": {
"psr-4": {
"MyCompany\\": "lib/"
}
},
"config": {
"vendor-dir": "vendor"
}
}
Подключение в init.php
Закрываем /local/vendor/ от публичного доступа
Для Nginx:
location ^~ /local/vendor/ { deny all; return 404; }Для Apache (.htaccess в /local/vendor/):
Order deny,allow Deny from allПример использования Guzzle в компоненте
"https://api.example.com"]); try { $response = $client->get("/users", [ "headers" => ["Authorization" => "Bearer " . TOKEN], "timeout" => 10, ]); $data = json_decode($response->getBody(), true); } catch (\GuzzleHttp\Exception\RequestException $e) { AddMessage2Log($e->getMessage(), "my_module"); }Собственные классы через PSR-4
calculate(2.5, "Москва");Обновление зависимостей
cd /home/bitrix/www/local # Установить зависимости (первый раз или после git pull) composer install --no-dev --optimize-autoloader # Добавить новый пакет composer require league/csv:^9.0 # Обновить все пакеты composer updateДобавляем vendor в .gitignore
# .gitignore /local/vendor/Коммитим только
composer.jsonиcomposer.lock. На сервере запускаемcomposer installкак часть деплоя.Итог
Ключевые правила: Composer в
/local/, подключение автолоадера черезinit.php,/vendor/закрыт от публичного доступа. После этого любые Composer-пакеты работают в Битрикс-проекте без конфликтов.
