- •Что умеет Composer?
- •Рабочий пример: используем Composer в своём проекте
- •Подключаем пакеты с сайта packagist.Org
- •Подключаем на собственный Compsoer-пакет
- •Подключаем произвольный git репозиторий
- •Подключаем простой zip файл
- •Инстукция autoload
- •Запускаем composer install
- •Как создать собственный Composer пакет?
Подключаем простой zip файл
Например, вот как могло бы выглядеть описание зависимости от шаблонизатора Smarty, распространяемого в виде zip файла с исходниками в svn:
{
"repositories":[
{
"type":"package",
"package":{
"name":"smarty/smarty",
"version":"3.1.7",
"dist":{
"url":"http://www.smarty.net/files/Smarty-3.1.7.zip",
"type":"zip"
},
"source":{
"url":"http://smarty-php.googlecode.com/svn/",
"type":"svn",
"reference":"tags/Smarty_3_1_7/distribution/"
}
}
}
],
"require":{
"smarty/smarty":"3.1.*"
}
}
Инстукция autoload
Вернёмся к нашему проекту. Описывая «pqr/superlib», мы добавили инструкцию autoload. В ней указан файл timer.php, в котором будущий автозагрузчик будет искать классы и указали файл с функциями lib_functions.php — он будет принудительно подключаться в начале autoload.php. Итак, наш проект состоит из:
в корне лежит файл composer.json;
в корне находятся директории web и views;
внутри директории web лежит файл с «бизнес-логикой» нашего приложения: index.php;
внутри директории views лежит файл шаблона layout.twig;
дополнительно, в папку web я положил .htaccess (для apache) и web.config (для IIS 7.5) с правилами mod_rewrite/url rewriter — непосредсвенно к настройке Composer они отношения не имеют.
Всё готово к запуску.
Запускаем composer install
php composer.phar install
Composer клонирует репозитории и распаковывает их на нужной версии в директорию vendor, которую он сам создаёт в корне проекта. После распаковки, в директории vendor мы найдём:
файл autoload.php
служебные директории .composer и composer
pimple — пакет, который подтянулся вместе с микрофреймворком Silex
silex — сам микрофреймворк, его мы явным образом затребовали при описании зависимостей
symfony — некоторые компоненты из Symfony 2, которые требуются для работы Silex
twig — шаблонизатор, который мы также явно запросили
mycompany — внутри этой директории будет находиться репозиторий superlogger скаченный с github
pqr — внутри этой директории будет находиться репозиторий superlib, также скаченный с github
Остаётся только подключить autoload.php в начале файла web/index.php (require "../vendor/autoload.php") и все библиотеки и функции будут доступны!
Как создать собственный Composer пакет?
В этом проекте мы использовали Composer с точки зрения потребителя библиотек. А как самому создать Composer пакет, чтобы любой другой человек смог им воспользоваться? На самом деле, один из таких пакетов я создал, когда подготавливал примеры для этой статьи. В корне репозитория superlogger лежит файл composer.json похожей структуры, который описывает сам пакет и его зависимости (в случае с superlogger зависимостей нет). Другие примеры: репозитории silex и twig, которые скачались в папку vendor — все они имеют файл composer.json в корне — смотрите, изучайте! И, конечно, не забывайте про документацию на официальном сайте getcomposer.org/doc/.
