Добро пожаловать в блог, где важны слова.

Тут я частенько публикую в открытым доступе полезные материаллы и готовые решения для повседневных задач по 1С-Битрикс и Битрикс24, а также затрагиваю темы всё что связано с сайтостроением

Composer + 1С-Битрикс с автозагрузкой классов

Composer + 1С-Битрикс с автозагрузкой классов

Первым делом установите composer на вашем сервере

В последних версиях битрикс уже есть Composer, в папке "/bitrix/" Вы найдете 2 файла: "composer.json.example" и "composer-bx.json". 1 файл они оставили в качества примера, а второй по их рекомендации будем подключать в свой файл composer.json через плагин Composer Merge Plugin

Для удобства я решил расположить файл composer.json в папке /local/ и думаю это правильное решение нежели в папке /bitrix/.

composer.json

{
  "require": {
    "wikimedia/composer-merge-plugin": "dev-master",
    "kint-php/kint": "^4.0"
  },
  "require-dev": {
    "roave/security-advisories": "dev-latest"
  },
  "config": {
    "vendor-dir": "vendor"
  },
  "extra": {
    "merge-plugin": {
      "require": [
        "../bitrix/composer-bx.json"
      ]
    }
  },
  "autoload": {
    "psr-4": {
      "App\\Namespace\\": "php_interface/classes/"
    }
  }
}

Как могли заметить я добавил сюда автозагрузку классов, придерживаясь стандарту PSR-4

Так как по умолчанию при выполнения команды composer install система ожидает увидеть наш файл composer.json из папки /bitrix/, но мы его расположили в папке /local/, чтобы сменить путь пропишем в файле /bitrix/.settings.php

'composer' => [
        'value' => ['config_path' => '/local/composer.json']
    ],

Данная запись в файле .settings.php Вам понадобиться когда будете использовать Bitrix CLI

И на последок подключим файл autoload.php в init.php, чтобы Битрикс увидел наши созданные классы

Для этого я создал файл autoload.php в папке "/local/php_interface/" в нем подключаем файл autoload.php от composer

if (file_exists($_SERVER["DOCUMENT_ROOT"]."/local/vendor/autoload.php")) {
    require_once($_SERVER["DOCUMENT_ROOT"] . "/local/vendor/autoload.php");
}

Затем в файле /local/php_inteface/init.php

if (file_exists($_SERVER["DOCUMENT_ROOT"]."/local/php_interface/autoload.php")) {
    require_once($_SERVER["DOCUMENT_ROOT"] . "/local/php_interface/autoload.php");
}
Возврат к списку