Содержание:
- Эволюция разработчика
- Что такое composer?
- Настройка под битрикс
- Внедрение 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
Эволюция разработчика
init.php
. Со временем файл разрастается, накапливаются десятки функций и классов.init.php
. В одном классы, во втором функции. Возможно даже, он начал отделять каждый класс в отдельный файл и вместо одного инклуда с файлом классов, их столько сколько классов. Функции тоже можно раскидать по файлам, названия которых могут однозначно указать к какому модулю, либо компоненту они относятся(sale, catalog и т.п.).spl
для автозагрузки.Spl
, psr-4
кажется стремиться уже некуда.composer
.Что такое composer?
php
. Он уже давно стал стандартом автозагрузки во многих крупных фреймворках по умолчанию.composer
.Настройка под битрикс
composer
— это решить где расположить папку vendor
и файлы composer
. По этому вопросу разработчики разделяются на 3 лагеря:- на уровне с корневой папкой проекта(т.е. на одном уровне у вас будут лежать:
public_html(htdocs)
,vendor
,composer.json
) - в папке
/bitrix/
- в папке
/local/
- Кто-то может расположить в корне проекта, но этот подход однозначно не правильный.
yii2
, сторонние системные файлы, модули и другие разработки подгруженные через composer
хранятся в папке vendor
на уровне с папкой www
. Считаю верным решением.bitrix
, есть папка local
, а он хочет в корень засунуть? Вот чудак!».composer
в папку /bitrix/
Внедрение composer в папку /local/
.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 умеет не только автозагрузку классов. Его основное предназначение управлять зависимостями. Рассмотрим пример использования(скоро будет).
> Если вы изменили файл composer.json, то нужно выполнить update
`update` обновит все зависимости и composer.lock.
Чтобы применить изменения в конфигурации автозагрузки надо выполнить `composer dump`