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

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

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

Содержание:

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

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

Стадия 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. на уровне с корневой папкой проекта(т.е. на одном уровне у вас будут лежать: bublic_html(htdocs), vendor, composer.json)
  2. в папке  /bitrix/
  3. в папке  /local/
  4. Кто-то может расположить в корне проекта, но этот подход однозначно не правильный.
Разберем все способы по-порядку.
Первый я подглядел тут (довольно познавательное видео, рекомендую к просмотру) . Так устроен yii2, сторонние системные файлы, модули и другие разработки подгруженные через  composer хранятся в  папке vendor на уровне с папкой www.
Второй метод, по мне претендует на одно из правильных решений. Папка битрикс предназначена для системных файлов и сторонних разработок(модулей, компонентов, виджетов). Тут-то мы и можем разместить папку vendor, куда будут скачиваться сторонние разработки.
Третий вариант тоже имеет право на жизнь и его часто ставят в пример тем, кто использует «неправильный» второй метод. Установка по этому методу рассмотрена здесь.
Четвертый подход вызовет негодование у сторонников 2 и 3 подходов( и 1-ого тоже). «Как же так, есть папка  bitrix , есть папка local , а он хочет в корень засунуть? Вот чудак!».
Получается какой-то недоделанный первый метод, но в корне с неверной идеологией. Зачем папку с логикой оставлять в корне, получается совсем не структурировано.
Какой метод выбрал я?
Так как, у меня не было возможности использовать первый метод, я стал сторонником второго метода. И далее расскажу, как я внедрял  composer в папку /bitrix/

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

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

Файлы composer.json и composer.lock не должны попасть в игнор. Они должны отслеживаться системой контроля версий.

Шаг 2
Скачиваем composer.phar файл с сайта https://getcomposer.org (последнюю версию скачиваем отсюда) либо с консоли качаем.
Шаг 3
Закидываем файл в папку  /bitrix/
и дальше два пути:
  • Если у вас уже есть подготовленный файлик 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/, которая предварительно будет создана в папке /bitrix/.
Шаг 4
И самое главное — composer автоматически сгенерирует файл /bitrix/vendor/autoload.php, который надо будет добавить в init.php:
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/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 умеет не только автозагрузку классов. Его основное предназначение управлять зависимостями. Рассмотрим пример использования(скоро будет).
ПоделитьсяShare on Facebook0Share on VKShare on Google+0Tweet about this on TwitterShare on LinkedIn0Pin on Pinterest0

Добавить комментарий