Composer для автозагрузки классов битрикс

устанавливаем composer в битрикс

Рано или поздно у каждого bitrix разработчика возникает вопрос, где размещать свои классы и функции, классы сторонних разработчиков. В документации Битрикс подобные вопросы решаются созданием модуля, либо размещением своего кода в init.php.

Содержание:

  1. Эволюция разработчика
  2. Что такое composer?
  3. Настройка под битрикс
  4. Внедрение composer в папку /bitrix/
  5. Настройка автозагрузки
  6. Дальнейшее использование

Update: В версии 18.0.5 bitrix начал использовать composer внутри продукта в режиме разработки. Подробнее ознакомьтесь в документации https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=4637&LESSON_PATH=3913.3516.4776.2483.4637

Эволюция разработчика

Стадия 1
Т. к. городить модули надоедает и не всегда это целесообразно, многие следуют более простому решению проблемы — это писать код в init.php. Со временем файл разрастается, накапливаются десятки функций и классов.
Стадия 2
Наступает следующий этап — разработчик инклудит два файла в init.php. В одном классы, во втором функции. Возможно даже, он начал отделять каждый класс в отдельный файл и вместо одного инклуда с файлом классов, их столько сколько классов. Функции тоже можно раскидать по файлам, названия которых могут однозначно указать к какому модулю, либо компоненту они относятся(sale, catalog и т.п.).
Стадия 3
Написан свой автозагрузчик(autoload), может без следования стандартам(psr-0, psr-4), а может уже придерживается стандарта. А еще круче, если используются функции библиотеки spl для автозагрузки.
Стадия 4
Spl, psr-4 кажется стремиться уже некуда.
Стадия 5
И вот тут вы услышали про composer.

Что такое composer?

Composer — менеджер зависимостей php.  Он уже давно стал стандартом автозагрузки во многих крупных фреймворках по умолчанию.
Хочется, чтобы и битрикс шел в ногу со временем. Поэтому научим наш проект подгружать классы с помощью  composer.

Настройка под битрикс

Первое, что нужно сделать перед установкой  composer — это решить где расположить папку vendor и файлы composer. По этому вопросу разработчики разделяются на 3 лагеря:
  1. на уровне с корневой папкой проекта(т.е. на одном уровне у вас будут лежать: public_html(htdocs), vendor, composer.json)
  2. в папке  /bitrix/
  3. в папке  /local/
  4. Кто-то может расположить в корне проекта, но этот подход однозначно не правильный.
Разберем все способы по-порядку.
Первый я подглядел тут (довольно познавательное видео, рекомендую к просмотру) . Так устроен yii2, сторонние системные файлы, модули и другие разработки подгруженные через  composer хранятся в  папке vendor на уровне с папкой www. Считаю верным решением.
Второй метод, раньше мне казался верным, но сейчас я так не считаю. Оставим эту папку для системных файлов.
Третий вариант тоже будет верным решением. Установка по этому методу рассмотрена здесь. По этому методу и я проведу установку.
Четвертый подход вызовет негодование у сторонников 2 и 3 подходов( и 1-ого тоже). «Как же так, есть папка  bitrix , есть папка local , а он хочет в корень засунуть? Вот чудак!».
Получается какой-то недоделанный первый метод, но в корне с неверной идеологией. Зачем папку с логикой оставлять в корне, получается совсем не структурировано.
Какой метод выбрал я?
Так как, у меня не было возможности использовать первый метод, я стал сторонником второго метода. И далее расскажу, как я внедрял  composer в папку /bitrix/
Update: В версии 18.0.5 bitrix начал использовать composer внутри продукта в режиме разработки. Подробнее ознакомьтесь в документации https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=4637&LESSON_PATH=3913.3516.4776.2483.4637

Внедрение composer в папку /local/

Шаг 1
Добавляем в .gitignor
public_html/local/composer.phar
public_html/local/vendor/*
public_html/local/composer.json

Файл composer.lock должен быть под git.
Если другой человек скачает ваш проект, ему достаточно выполнить composer install и он получит все пакеты тех же версий, что и у вас, а точнее те, что зафиксированы в файле composer.lock.
без этого файла при загрузке пакетов могут быть получены версии пакетов отличные от ваших.

Шаг 2
Скачиваем composer.phar файл с сайта https://getcomposer.org (последнюю версию скачиваем отсюда) либо качаем из консоли.
Шаг 3
Закидываем файл в папку  /local/
и дальше два пути:
  • Если у вас уже есть подготовленный файлик composer.json , то выполняем:
php composer.phar install
  • Если вы устанавливаете composer в первый раз и у вас нет своего готового composer.json , то выполняем:
php composer.phar init

Выше в примерах использовал стандартную запись php composer.phar init.
Обычно путь до php на разных хостингах отличается, т.е. пишут сокращенно php(либо у вас создан алиас на php).
Например, в моём случае, php лежит по адресу /opt/php56/bin/ и нужно писать:

/opt/php56/bin/php composer.phar init

И учтите, что если в команде пишите composer.phar, то вы должны находиться именно в той директории, где он лежит.

В результате он запросит у вас данные по проекту, инициализируйте проект вашими данными.
В итоге сгенерируется  composer.json и нужно выполнить команду install
Подтянуться все зависимости, и загрузятся в папку /vendor/, которая предварительно будет создана в папке /local/.
Шаг 4
И самое главное — composer автоматически сгенерирует файл /local/vendor/autoload.php, который надо будет добавить в init.php:
require_once($_SERVER['DOCUMENT_ROOT'] . '/local/vendor/autoload.php');

Настройка автозагрузки

Теперь можно переводить существующие у вас в проекте классы на автозагрузку через composer. Если вы придерживались стандарта psr-0 или не придерживались можете посмотреть тут, как это подключить и офиц. документация.
Если придерживались psr-4, заполняется анналогично psr-0:
{
    "autoload": {
        "psr-4": {
            "Vendor\\Namespace\\": "/../local/php_interface/classes/"
        }
    }
}
Подробнее по psr-4 идем по ссылке

Если вы изменили файл composer.json, то нужно выполнить update:

php composer.phar update

Дальнейшее использование

Дальше при создании классов придерживайтесь стандарта psr-4. Т.е. если вы захотите создать новое пространство имен или новый класс вам нужно придерживаться стандарта именования папок и файлов и composer автоматически подтянет их.
Хочу вас обрадовать composer умеет не только автозагрузку классов. Его основное предназначение управлять зависимостями. Рассмотрим пример использования(скоро будет).

Рекомендуем к прочтению



1 Комментарий

  • > Если вы изменили файл composer.json, то нужно выполнить update

    `update` обновит все зависимости и composer.lock.
    Чтобы применить изменения в конфигурации автозагрузки надо выполнить `composer dump`

Оставить комментарий

Этот сайт защищен reCAPTCHA и применяются Политика конфиденциальности и Условия обслуживания применять.

Срок проверки reCAPTCHA истек. Перезагрузите страницу.