Найти в Дзене
Битрикс и не только

Composer + Битрикс + Автозагрузка

Всем привет!

Небольшой мануал по работе с composer в Битриксе.

Если Вы не знаете, что это и зачем он нужен - небольшая выдержка из википедии:

Composer - это пакетный менеджер уровня приложений для языка программирования PHP, который предоставляет средства по управлению зависимостями в PHP-приложении. Composer разработали и продолжают поддерживать два программиста Nils Adermann и Jordi Boggiano. Они начали разрабатывать Composer в апреле 2011, а первый релиз состоялся 1 марта 2012. Идея создания пакетных менеджеров уровня приложений не нова и его авторы вдохновлялись уже существовавшим на тот момент времени npm для Node.js.

Больше подробностей, а так же мануалов по установке, можно найти, забив в поисковике слово composer.

Начнем с того, что в Битриксе (последних версий) уже есть composer. Не буду разглагольствовать о том, почему composer.json лежит в папке bitrix, и вообще, почему он называется composer-bx.json

Можно рассказать проще в четырех словах: для битрикса будет два файла:

  • Из коробки /bitrix/composer-bx.json
  • Пользовательский, путь к которому мы указываем в файле настроек .settings.php

Требуется добавить в возвращаемый массив настроек (.settings.php ):

'composer' => [

'value' => ['config_path' => 'полный путь до файла composer.json']

],

Пример файла composer.json (будем держать его в корне проекта)

{

"require": {

"wikimedia/composer-merge-plugin": "dev-master",

},

"config": {

"vendor-dir": "local/vendor" .

},

"extra": {

"merge-plugin": {

"require": [

"'полный путь до файла composer-bx.json"

]

}

},

}

Немного пояснений. В данном файле указывается, что будет происходить merge с битриксовым файлом compose-bx.json (с использованием плагина wikimedia/composer-merge-plugin), а также указывается где будет расположена папка vendor

После выполнения composer update все зависимости будут установлены в каталог local/vendor

Также в нем будет создан файл autoload.php

Данный файл нам нужно подключить в init.php

Добавим в него код:

<? include $_SERVER["DOCUMENT_ROOT"].'/local/vendor/autoload.php'; ?>

И всё!

Для проверки можно, что-нибудь установить для проверки:

composer require kint-php/kint

B каком-нибудь тестовом файле

<? d(111); ?>

Ну и на сладенькое, немного автозагрузки:

Добавим в composer.json секцию autoload

"autoload": {

"psr-4": {

"App\\": "local/php_interface/App"

}

}

Далее в папке local/php_interface создаем папку App, в ней можем создать файл Main.php

namespace App;

class Main

{

static public function test() : void

{

echo 'HLWRD';

}

}

Далее где-нибудь в тестовом файле вызываем <?App\Main::test()?>

Результатом будет выведенная строка HLWRD.

Если Вы хотите подключить какую-либо библиотеку, имея только ссылку ссылку на репозиторий проекта, то это можно сделать добавив в composer.json секцию repositories:

"repositories":[

{

"type":"git",

"url":"https://github.com/maximaster/tools.orm"

}

],

После этого выполните composer update и пакет будет установлен.

Спасибо за внимание. Если у Вас есть вопросы, задавайте в комментариях.