Composer
Composer (getcomposer.org) — это пакетный менеджер для PHP. И так что же представляет собой пакетный менеджер! Пакетный менеджер это набор программного обеспечения, позволяющего управлять процессом установки, удаления, настройки и обновления различных компонентов программного обеспечения. В нашем случае настраивать приложение без дополнительных плагинов Composer не будет! Про плагины и возможное расширение функционала Composer-а описывать не будем,этому возможно будет посвящена отдельная статья.
Для начала посоветую ознакомиться со следующими статьями:
1. Composer — менеджер зависимостей для PHP (http://habrahabr.ru/post/145946/)
2. Простое использование composer в Yii (http://tvorzasp.com/...composer-v-yii/)
И так в двух словах, что же можно делать при помощи Composer?
1. Скачивать пакеты и их зависимости
2. Скачивать пакеты, не только с packagist.org(официальный репозиторий), но и из любого git, mercurial, svn или стороннего репозитория (Можно даже организовать свой личный репозиторий!!!)
3. Работать с версиями, вышеперечисленных репозиториев.
4. Хранить пакет не только в каком-то из репозиториев, но и в простом zip архиве, на жёстком диске или на вашем личном сервере.
5. Произвольно оформлять пакет, без занесения его в какой-либо репозиторий строгого описании и т.д. и т.п. ну, в общем, свобода действия - нужна ссылка на архив, правильно описываем его в файле инструкций и всё готово!
6. Загружать пакеты одной командой - update (при первом запуске нужно выполнить install)
Давайте от сухой теории перейдём к практике.
Начнём!
Создаём папку (composer-test.com каждый может выбрать любое другое название по душе) под сайт, в директории Y:\home(это через виртуальный диск) или path/to/WebServers/home (это уже кому как нравится)
Создаём в папке composer-test.com текстовый файл composer.json – в данном файле мы и опишем все зависимости. Важно,- данный файл должен называться именно так!
Далее открываем (composer.json) в каком-то текстовом редакторе, у меня например это Notepad++
Пишем инструкции:
Сохраняем.
В двух словах, что мы сделали:
Запросили пакет "yiisoft/yii" версии "1.1.14", а также сконфигурировали установку, назначив папку для складывания всех пакетов параметра "vendor-dir" с путём "www/protected/vendor", данный путь будет относительно текущей директории(все пакеты будут размещены в папке path/to/WebServers/home/composer-test.com/www/protected/vendor).
Теперь пришло время запустить Composer!
Нажимаем Пуск->Выполнить Команду или нажмите Кнопку Windows + R
Пишем команду «cmd» и наживаем «Enter»
Перед вами открывается консоль
Теперь надо перейти к папке с проектом
cd /d full/path/to/composer-test.com
в моём случае это команда cd /d Y:\home\composer-test.com
атрибут /d – здесь установлен, так как происходит смена диска
Далее устанавливаем сам Composer (тут всё про установку http://getcomposer.org/download/)
Я просто скачиваю Composer в папку
php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"
у меня в консоли выдало следующее
Далее, если всё правильно установлено, выполняем команду
php composer.phar install
у меня в консоли выдало
Смотрим, что же у нас получилось!!!
В папке Y:\home\composer-test.com появилась папка www/protected/vendor, в неё скачался наш первый пакет - "yiisoft/yii" ,который находится в папке -
Y:\home\composer-test.com/www/protected/vendor/yiisoft/yii.
Хочу обратить ваше внимание на то, что название пакета "yiisoft/yii" ("require": {"yiisoft/yii": "1.1.14"})
и название папки, в которую скачался пакет идентичны Y:\home\composer-test.com/www/protected/vendor/yiisoft/yii
ещё раз про структуру, потому что вам необходимо чётко понимать, где пакеты, чтобы лучше ориентироваться в коде
Y:\home\composer-test.com/ - папка в которой находится composer.phar
Y:\home\composer-test.com/www/protected/vendor/ - папка куда складываются все пакеты (по умолчанию /vendor/ но мы переустановили данную папку на "vendor-dir": "www/protected/vendor")
Y:\home\composer-test.com/www/protected/vendor/yiisoft/yii – папка в которую скачался пакет "yiisoft/yii"
Теперь давайте установим, например, yii-booster (http://yiibooster.clevertech.biz/) очень удобная вещь для построения бэкендов и работы с Bootstrap
Находим данное приложение в офф репозитории (https://packagist.or...ech/yii-booster)
Я решил поставить версию 2.0.0 значит надо добавить запись в require - "clevertech/yii-booster": "v2.0.0". итак наш файл composer.json будет выглядеть так:
Далее набираем в консоли
php composer.phar update – именно update потому что install выполняется только первый раз
у меня в консоле
Теперь в папке Y:\home\composer-test.com/www/protected/vendor/
Находится уже два пакета:
Y:\home\composer-test.com/www/protected/vendor/yiisoft/yii
Y:\home\composer-test.com/www/protected/vendor/clevertech/yii-booster
Вывод
Composer - это очень удобное приложение для сборки инструментов или частей проекта, от вас требуется только правильно оформить файл composer.json
Фаил composer.json и Дополнительные возможности для разработки
Полное описание схемы формирования можно посмотреть тут http://getcomposer.o...oc/04-schema.md
Основные моменты с которыми вы будете сталкиваться при работе с файлом composer.json :
1) Работа со сторонними репозиториями
2) Работа с zip архивами
3) Наличие дополнительных удобств при разработке
4) Различие файла для пакета (создание своих библиотек) и проектного
5) Мелкие настройки
Работа со сторонними репозиториями и zip архивами
За настройку сторонних мест хранения пакетов отвечает параметр repositories в файле composer.json
Пример описания сторонних мест
В данном примере показано три варианта указания мест хранения пакетов
1 вариант
Здесь описан пакет some/package расположенный на github.com
В пакете необходим файл composer.json с описанием пакета
2 вариант
Здесь описан пакет в произвольной форме, находящийся в zip архиве ему дали название "smarty/smarty"("name": "smarty/smarty") установили версию "3.1.7" ("version": "3.1.7") и путь для скачивания архива("dist": {"url": "http://www.smarty.net/files/Smarty-3.1.7.zip","type": "zip"})
3 вариант
Ранее я говорил, что есть возможность создания своего личного репозитория, данная запись обозначит поиск пакетов в указанном репозитории.
Если пакет не найден ни в одном из указанных мест, то поиск будет продолжен в официальном репозитории.
Для отключения поиска в официальном репозитории необходимо добавить в список запись:
Пример:
Хочу уточнить, что мы только обозначили места, откуда будут скачиваться пакеты, но пока мы их не добавим в раздел "require" пакеты не будут скачены.
Для того чтоб воспользоваться пакетами нам надо в раздел require добавить название пакета и версию.
Пример:
Наличие дополнительных удобств при разработке
Composer позволяет разделить процесс разработки пакета и его использования. При разработке обычно необходимы дополнительные инструменты для тестирования пакета.
Для этого в файле нужно описать переменную require-dev, данная переменная работает как и переменная require, только Composer ею пользуется, если вызвать установку с доп. параметром “--dev”
Консольная комманда выглядит так php composer.phar install --dev
Пример:
В данном примере если вызвать установку с параметром –-dev, то в папку скачается доп. пакет phpunit/phpunit.
Различие файла для пакета (создание своих библиотек) и проектного файла
Пакетный файл
Одно обязательное поле "name"
"name": "some_nik/pack_name" – название состоит из двух частей разделённых слешем: первая часть обычно это ник пользователя, а вторая часть это уже выбранное разработчиком название пакета.
Остальные поля не обязательно, но часто используют следующие
"type": "library" – описать тип пакета, по умолчание library
Composer различает несколько типов я их не стану рассматривать, если захотите углубится, то материал тут http://getcomposer.o...-schema.md#type
"version": "1.0.0" – описать версию пакета
"license": "BSD-3-Clause" – описать лицензию пакета
"description": "text text text" – краткое описание пакета
"authors": [
{
"name": " name ",
"email": "email@some.com",
"homepage": "http://www.some.com "
}
] – в данном разделе можно перечислить авторов проекта
"require": {} – тут и так всё понятно
Проектный файл
В этом файле только требуется перечислить необходимые для сборки пакеты, то есть описать параметр require.
В официальной документации есть такое понятие как (root-only), это как раз относится только к данному файлу.
Вообще разницы между проектным и пакетным файлом нет. Надо понимать, что для разработчика пакет является проектом, а для тех, кто им пользуется пакетом. Для этого и была разработана логика root-only, так как некоторые переменные, такие как require-dev работают только из проектного файла.
Мелкие настройки
Параметры:
minimum-stability (root-only) – доступные значения dev, alpha, beta, RC, stable по умолчанию stable
config (root-only) – это блок параметров настроек. ниже будут перечислены часто используемые:
vendor-dir – указание пути паки для хранения пакетов
bin-dir - указание пути паки для хранения консольных команд
extra – это универсальный блок для хранения каких-то настроек используемых в дополнительных плагинах Composer
Итог по Copmoser-у
Удобен для быстрой сборки необходимых инструментов, не критичен к месту хранения пакетов, возможно лёгкое разделение работы, а также доп. возможности для разработчика.
Единственный минус - нет возможности воспользоваться им, если хостер не предоставил ssh, но можно собрать локально и выгрузить на сервер!!!
Я не упоминал в статье про автоматическую генерацию autoload.php файла, потому что это описано в других статьях и при использовании c Yii нет необходимости.
YiiComposer (https://packagist.or...dev/yiicomposer)
Острой необходимости в создании данного инсталлера не было, но у меня, как у разработчика работающего с Yii, есть привычки и желание оптимизировать и структурировать работу!
Первое от чего я стремился избавиться это длинные названия, допустим, есть пакет mihaildev/testextension то путь к данному пакету будет следующий
application.vendor.mihaildev.testextension.SomeExtension
Длинновато, не правда ли!
Поэтому я решил ввести свои типы, по умолчанию YiiComposer различает три типа extension, module, framework.
Для того чтоб YiiComposer распознал в пакете один из типов необходимо либо в описании пакета указать тип в формате yii-{type} или yii-{type}-{name} (пример "type": "yii-extension-test" {type} равен extension {name} равен test) либо в настройках путей указать для пакета тип и если необходимо переопределить имя.
Если правильно задать тип, то пакеты в свою очередь сформируют в папке vendor следующую структур:
Для yii-extension-name это vendor/extensions/name
Для yii-module-name это vendor/modules/name
Посудите сами, я не думаю, что вы будете использовать два различных модуля с одинаковым названием в одном проекте, а преимущество, которое предоставляет нововведение, это короткие и более читабельные алиасы.
Добавляем алиасы в список настроек:
'aliases'=>array(
'vmodule'=>'application.vendor.modules',
'vext'=>'application.vendor.extensions'
),
Теперь при установке mihaildev/testextension, у которого тип установлен yii-extension-test, путь выглядит так:
vext.test.SomeExtension
Сравните со старым вариантом:
application.vendor.mihaildev.testextension.SomeExtension
Мелочь, а приятно!!!
Настройка путей и свои типы
В разделе extra можно добавить блок yiicomposer-paths
Где можно переназначить стандартные типы или добавить новые, а также для пакетов, у которых не указан тип
Настройки по умолчанию, которые не обязательно указывать, но при необходимости можно переназначить
Пути можно образовать несколькими способами
Составное формирование пути, основываясь на следующих переменных:
{vendor} – путь к папке для хранения всех пакетов берётся из основных настроек "vendor-dir"
{type} – тип пакета, если указан (пример yii-extension-test - {type} будет равен extension)
Тип пакета можно указать как в настройках пакета (в файле composer.json параметр "type" пакета) так и в настройках проектного файла в разделе "yiicomposer-paths" как для пакета yiisoft/yii установлен тип framework. Тип задаётся в нескольких форматах для параметра type в пакете yii-{type} или yii-{type}-{name} или в проектном файле в разделе "yiicomposer-paths" в формате ${type}$ или ${type}-{name}$
Если тип пакета задан но не описан в "yiicomposer-paths" то по умолчанию папка "{vendor}/{type}/{name}"
{package} – название пакета оригинальное (пример mihaildev/testextension будет равен mihaildev/testextension)
{name} – название по умолчанию берётся из названия пакета вторая часть (пример "name": "mihaildev/testmodule" {name} равен testmodule), если название установлено в типе пакета, то yiicomposer возьмёт его (пример yii-extension-test - {name} будет равен test) также можно переназначить и в настройках (пример "clevertech/yii-booster": "$extension-yii-booster$" {name} будет равен yii-booster)
Пример использования
Важно чтоб mihaildev/yiicomposer был первым в списке требуемых и был установлен первым!!! Иначе он не сработает.
При тестировании было замечено, что ,если один из пакетов был ранее закеширован, то появляется вероятность установки закешированных пакетов первыми, что приведет к ошибкам в путях.
В примере указан параметр "minimum-stability" : "alpha" потому что данный проект ещё открыт для изменений, я хочу получить окончательную критику и при необходимости доработать
Подстановка
Допустим у нас есть сторонняя библиотека "clevertech/yii-booster", у которой не описан тип.
Мы добавляем запись "clevertech/yii-booster": "$extension-yii-booster$"
Данная форма записи заполняет пробелы информации, которой не хватало для нормальной работы
"$extension-yii-booster$" – выделенная часть укажет, каким правилом надо воспользоваться для формирования пути
"$extension-yii-booster$" – выделенная часть будет использована в правиле как переменная {name},
что в свою очередь позволит получить адрес типа extension и сформирует путь path/to/vendor/extensions/yii-booster
Хочу сказать, что можно было бы сделать и такую запись "clevertech/yii-booster": "$extension$" так как {name} берётся изначально из второй части названия пакета ("clevertech/yii-booster" вторая часть yii-booster) то у нас получился абсолютно такой же результат.
Пример использования:
Продумывая настройку путей, я старался упростить и увеличить гибкость использования.
Приведу несколько примеров использования
Точное назначение папки
Свои типы
В данном примере мы добавили тип "sometype",а также переопределили пути для пакетов,что приведёт к установке пакетов в папки:
yiiext/migrate-command в рath/to/vendor/some/hochutut и
mihaildev/testextension в рath/to/vendor/some/hochutut2
С управлением путей разобрались, перейдём ко второй части YiiComposer
Запуск консольных команд после обновления
В раздел scripts вносим следующую запись
"post-update-cmd": "YiiComposer\\Console::update"
Пример
По умолчанию для запуска консольного приложения используется файл с настройками, находящийся по адресу path/to/vendor/../config/console.php,
так как я предполагаю, что пользователи будут хранить папку vendor в папке protected, но при необходимости можно установить пременную "yiicomposer-console-config" указав путь к файлу с настройками.
Пример:
По умолчанию выполняется только одна консольная команда yiic migrate
При необходимости можно добавить или переопределить список запускаемых команд настроив переменную "yiicomposer-console-commands"
Пример:
Процесс:
Запускаем install (php composer.phar install)– при первом запуске консольные команды не запускаются я специально это сделал для того чтоб после сборки можно было проверить и настроить файл console.php (внести настройки БД и т.д.)
Запускаем update (php composer.phar update)– при втором запуске и последующих запусках консольные команды будут выполняться сразу после успешной сборки.
Ещё думаю проработать работу с языковыми пакетами!!!
В качестве примера использования, я собрал себе заготовку инструментов для создания проектов.
Рассчитан на работу с Денвером, но немного изменив можно и подо что угодно. https://github.com/M...-composer-blank
Как пользоваться заготовкой
Регистрируем на Денвере сайт допустим testproj.com (создаём папку у меня Y:\home\testproj.com)
Скачиваем архив распаковываем так чтоб фаил composer.json был в папке path/to/testproj.com (у меня Y:\home\testproj.com\composer.json)
В консоли переходим в папку Y:\home\testproj.com
Скачиваем туда composer.phar
Запускаем php composer.phar install
Что вы получите:
Главная страница
Страница контактов
Страница о нас
Бэкенд
Приложения
"mihaildev/elfinder" – (виджеты для работы с Файл менеджером http://elfinder.org/ подстраевается под работу с yii-booster)
"mihaildev/filesystem" – набор инструментов для работы с файлами
"mihaildev/backend" – приложение умеющее отделять бэкенд от фронтенда
"mihaildev/oneuser" – маленькое приложения для того чтоб не создавать пользовательский модуль то есть на сайте есть только один пользователь
"clevertech/yii-booster" - http://yiibooster.clevertech.biz/
"yiisoft/yii": "1.1.14" - Yii
"yiiext/migrate-command" – приложение для работы с модульными миграциями
В набор инструментов скоро войдёт приложение для работы с почтой и изображениями.
Composer (getcomposer.org) — это пакетный менеджер для PHP. И так что же представляет собой пакетный менеджер! Пакетный менеджер это набор программного обеспечения, позволяющего управлять процессом установки, удаления, настройки и обновления различных компонентов программного обеспечения. В нашем случае настраивать приложение без дополнительных плагинов Composer не будет! Про плагины и возможное расширение функционала Composer-а описывать не будем,этому возможно будет посвящена отдельная статья.
Для начала посоветую ознакомиться со следующими статьями:
1. Composer — менеджер зависимостей для PHP (http://habrahabr.ru/post/145946/)
2. Простое использование composer в Yii (http://tvorzasp.com/...composer-v-yii/)
И так в двух словах, что же можно делать при помощи Composer?
1. Скачивать пакеты и их зависимости
2. Скачивать пакеты, не только с packagist.org(официальный репозиторий), но и из любого git, mercurial, svn или стороннего репозитория (Можно даже организовать свой личный репозиторий!!!)
3. Работать с версиями, вышеперечисленных репозиториев.
4. Хранить пакет не только в каком-то из репозиториев, но и в простом zip архиве, на жёстком диске или на вашем личном сервере.
5. Произвольно оформлять пакет, без занесения его в какой-либо репозиторий строгого описании и т.д. и т.п. ну, в общем, свобода действия - нужна ссылка на архив, правильно описываем его в файле инструкций и всё готово!
6. Загружать пакеты одной командой - update (при первом запуске нужно выполнить install)
Давайте от сухой теории перейдём к практике.
Начнём!
Создаём папку (composer-test.com каждый может выбрать любое другое название по душе) под сайт, в директории Y:\home(это через виртуальный диск) или path/to/WebServers/home (это уже кому как нравится)
Создаём в папке composer-test.com текстовый файл composer.json – в данном файле мы и опишем все зависимости. Важно,- данный файл должен называться именно так!
Далее открываем (composer.json) в каком-то текстовом редакторе, у меня например это Notepad++
Пишем инструкции:
{ "require": { "yiisoft/yii": "1.1.14" } , "config":{ "vendor-dir": "www/protected/vendor" } }
Сохраняем.
В двух словах, что мы сделали:
Запросили пакет "yiisoft/yii" версии "1.1.14", а также сконфигурировали установку, назначив папку для складывания всех пакетов параметра "vendor-dir" с путём "www/protected/vendor", данный путь будет относительно текущей директории(все пакеты будут размещены в папке path/to/WebServers/home/composer-test.com/www/protected/vendor).
Теперь пришло время запустить Composer!
Нажимаем Пуск->Выполнить Команду или нажмите Кнопку Windows + R
Пишем команду «cmd» и наживаем «Enter»
Перед вами открывается консоль
Теперь надо перейти к папке с проектом
cd /d full/path/to/composer-test.com
в моём случае это команда cd /d Y:\home\composer-test.com
атрибут /d – здесь установлен, так как происходит смена диска
Далее устанавливаем сам Composer (тут всё про установку http://getcomposer.org/download/)
Я просто скачиваю Composer в папку
php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"
у меня в консоли выдало следующее
Console said:
Y:\home\composer-test.com>php -r "eval('?>'.file_get_contents('https://getcompos
er.org/installer'));"
#!/usr/bin/env php
All settings correct for using Composer
Downloading...
Composer successfully installed to: Y:\home\composer-test.com\composer.phar
Use it: php composer.phar
er.org/installer'));"
#!/usr/bin/env php
All settings correct for using Composer
Downloading...
Composer successfully installed to: Y:\home\composer-test.com\composer.phar
Use it: php composer.phar
Далее, если всё правильно установлено, выполняем команду
php composer.phar install
у меня в консоли выдало
Console said:
Y:\home\composer-test.com>php composer.phar install
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing yiisoft/yii (1.1.14)
Loading from cache
Writing lock file
Generating autoload files
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing yiisoft/yii (1.1.14)
Loading from cache
Writing lock file
Generating autoload files
Смотрим, что же у нас получилось!!!
В папке Y:\home\composer-test.com появилась папка www/protected/vendor, в неё скачался наш первый пакет - "yiisoft/yii" ,который находится в папке -
Y:\home\composer-test.com/www/protected/vendor/yiisoft/yii.
Хочу обратить ваше внимание на то, что название пакета "yiisoft/yii" ("require": {"yiisoft/yii": "1.1.14"})
и название папки, в которую скачался пакет идентичны Y:\home\composer-test.com/www/protected/vendor/yiisoft/yii
ещё раз про структуру, потому что вам необходимо чётко понимать, где пакеты, чтобы лучше ориентироваться в коде
Y:\home\composer-test.com/ - папка в которой находится composer.phar
Y:\home\composer-test.com/www/protected/vendor/ - папка куда складываются все пакеты (по умолчанию /vendor/ но мы переустановили данную папку на "vendor-dir": "www/protected/vendor")
Y:\home\composer-test.com/www/protected/vendor/yiisoft/yii – папка в которую скачался пакет "yiisoft/yii"
Теперь давайте установим, например, yii-booster (http://yiibooster.clevertech.biz/) очень удобная вещь для построения бэкендов и работы с Bootstrap
Находим данное приложение в офф репозитории (https://packagist.or...ech/yii-booster)
Я решил поставить версию 2.0.0 значит надо добавить запись в require - "clevertech/yii-booster": "v2.0.0". итак наш файл composer.json будет выглядеть так:
{ "require": { "yiisoft/yii": "1.1.14", "clevertech/yii-booster": "v2.0.0" }, "config":{ "vendor-dir": "www/protected/vendor" } }
Далее набираем в консоли
php composer.phar update – именно update потому что install выполняется только первый раз
у меня в консоле
Console said:
Y:\home\composer-test.com>php composer.phar update
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing clevertech/yii-booster (v2.0.0)
Loading from cache
Writing lock file
Generating autoload files
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing clevertech/yii-booster (v2.0.0)
Loading from cache
Writing lock file
Generating autoload files
Теперь в папке Y:\home\composer-test.com/www/protected/vendor/
Находится уже два пакета:
Y:\home\composer-test.com/www/protected/vendor/yiisoft/yii
Y:\home\composer-test.com/www/protected/vendor/clevertech/yii-booster
Вывод
Composer - это очень удобное приложение для сборки инструментов или частей проекта, от вас требуется только правильно оформить файл composer.json
Фаил composer.json и Дополнительные возможности для разработки
Полное описание схемы формирования можно посмотреть тут http://getcomposer.o...oc/04-schema.md
Основные моменты с которыми вы будете сталкиваться при работе с файлом composer.json :
1) Работа со сторонними репозиториями
2) Работа с zip архивами
3) Наличие дополнительных удобств при разработке
4) Различие файла для пакета (создание своих библиотек) и проектного
5) Мелкие настройки
Работа со сторонними репозиториями и zip архивами
За настройку сторонних мест хранения пакетов отвечает параметр repositories в файле composer.json
Пример описания сторонних мест
{ "repositories": [ { "type": "vcs", "url": "https://github.com/some/package" }, { "type": "package", "package": { "name": "smarty/smarty", "version": "3.1.7", "dist": { "url": "http://www.smarty.net/files/Smarty-3.1.7.zip", "type": "zip" } } }, { "type": "composer", "url": "http://packages.example.com" } ] }
В данном примере показано три варианта указания мест хранения пакетов
1 вариант
{ "type": "vcs", "url": "https://github.com/some/package" }
Здесь описан пакет some/package расположенный на github.com
В пакете необходим файл composer.json с описанием пакета
2 вариант
{ "type": "package", "package": { "name": "smarty/smarty", "version": "3.1.7", "dist": { "url": "http://www.smarty.net/files/Smarty-3.1.7.zip", "type": "zip" } } }
Здесь описан пакет в произвольной форме, находящийся в zip архиве ему дали название "smarty/smarty"("name": "smarty/smarty") установили версию "3.1.7" ("version": "3.1.7") и путь для скачивания архива("dist": {"url": "http://www.smarty.net/files/Smarty-3.1.7.zip","type": "zip"})
3 вариант
{ "type": "composer", "url": "http://packages.example.com" }
Ранее я говорил, что есть возможность создания своего личного репозитория, данная запись обозначит поиск пакетов в указанном репозитории.
Если пакет не найден ни в одном из указанных мест, то поиск будет продолжен в официальном репозитории.
Для отключения поиска в официальном репозитории необходимо добавить в список запись:
{ "packagist": false }
Пример:
{ "repositories": [ { "packagist": false }, { "type": "composer", "url": "http://packages.example.com" } ] }
Хочу уточнить, что мы только обозначили места, откуда будут скачиваться пакеты, но пока мы их не добавим в раздел "require" пакеты не будут скачены.
Для того чтоб воспользоваться пакетами нам надо в раздел require добавить название пакета и версию.
Пример:
{ "repositories": [ { "type": "vcs", "url": "https://github.com/some/package" }, { "type": "package", "package": { "name": "smarty/smarty", "version": "3.1.7", "dist": { "url": "http://www.smarty.net/files/Smarty-3.1.7.zip", "type": "zip" } } } ], "require":{ "some/package": "*", "smarty/smarty": "3.1.7", } }
Наличие дополнительных удобств при разработке
Composer позволяет разделить процесс разработки пакета и его использования. При разработке обычно необходимы дополнительные инструменты для тестирования пакета.
Для этого в файле нужно описать переменную require-dev, данная переменная работает как и переменная require, только Composer ею пользуется, если вызвать установку с доп. параметром “--dev”
Консольная комманда выглядит так php composer.phar install --dev
Пример:
{ "require": { "php": ">=5.3.0", }, "require-dev": { "phpunit/phpunit": "3.7.*", } }
В данном примере если вызвать установку с параметром –-dev, то в папку скачается доп. пакет phpunit/phpunit.
Различие файла для пакета (создание своих библиотек) и проектного файла
Пакетный файл
Одно обязательное поле "name"
"name": "some_nik/pack_name" – название состоит из двух частей разделённых слешем: первая часть обычно это ник пользователя, а вторая часть это уже выбранное разработчиком название пакета.
Остальные поля не обязательно, но часто используют следующие
"type": "library" – описать тип пакета, по умолчание library
Composer различает несколько типов я их не стану рассматривать, если захотите углубится, то материал тут http://getcomposer.o...-schema.md#type
"version": "1.0.0" – описать версию пакета
"license": "BSD-3-Clause" – описать лицензию пакета
"description": "text text text" – краткое описание пакета
"authors": [
{
"name": " name ",
"email": "email@some.com",
"homepage": "http://www.some.com "
}
] – в данном разделе можно перечислить авторов проекта
"require": {} – тут и так всё понятно
Проектный файл
В этом файле только требуется перечислить необходимые для сборки пакеты, то есть описать параметр require.
В официальной документации есть такое понятие как (root-only), это как раз относится только к данному файлу.
Вообще разницы между проектным и пакетным файлом нет. Надо понимать, что для разработчика пакет является проектом, а для тех, кто им пользуется пакетом. Для этого и была разработана логика root-only, так как некоторые переменные, такие как require-dev работают только из проектного файла.
Мелкие настройки
Параметры:
minimum-stability (root-only) – доступные значения dev, alpha, beta, RC, stable по умолчанию stable
config (root-only) – это блок параметров настроек. ниже будут перечислены часто используемые:
vendor-dir – указание пути паки для хранения пакетов
bin-dir - указание пути паки для хранения консольных команд
extra – это универсальный блок для хранения каких-то настроек используемых в дополнительных плагинах Composer
Итог по Copmoser-у
Удобен для быстрой сборки необходимых инструментов, не критичен к месту хранения пакетов, возможно лёгкое разделение работы, а также доп. возможности для разработчика.
Единственный минус - нет возможности воспользоваться им, если хостер не предоставил ssh, но можно собрать локально и выгрузить на сервер!!!
Я не упоминал в статье про автоматическую генерацию autoload.php файла, потому что это описано в других статьях и при использовании c Yii нет необходимости.
YiiComposer (https://packagist.or...dev/yiicomposer)
Острой необходимости в создании данного инсталлера не было, но у меня, как у разработчика работающего с Yii, есть привычки и желание оптимизировать и структурировать работу!
Первое от чего я стремился избавиться это длинные названия, допустим, есть пакет mihaildev/testextension то путь к данному пакету будет следующий
application.vendor.mihaildev.testextension.SomeExtension
Длинновато, не правда ли!
Поэтому я решил ввести свои типы, по умолчанию YiiComposer различает три типа extension, module, framework.
Для того чтоб YiiComposer распознал в пакете один из типов необходимо либо в описании пакета указать тип в формате yii-{type} или yii-{type}-{name} (пример "type": "yii-extension-test" {type} равен extension {name} равен test) либо в настройках путей указать для пакета тип и если необходимо переопределить имя.
Если правильно задать тип, то пакеты в свою очередь сформируют в папке vendor следующую структур:
Для yii-extension-name это vendor/extensions/name
Для yii-module-name это vendor/modules/name
Посудите сами, я не думаю, что вы будете использовать два различных модуля с одинаковым названием в одном проекте, а преимущество, которое предоставляет нововведение, это короткие и более читабельные алиасы.
Добавляем алиасы в список настроек:
'aliases'=>array(
'vmodule'=>'application.vendor.modules',
'vext'=>'application.vendor.extensions'
),
Теперь при установке mihaildev/testextension, у которого тип установлен yii-extension-test, путь выглядит так:
vext.test.SomeExtension
Сравните со старым вариантом:
application.vendor.mihaildev.testextension.SomeExtension
Мелочь, а приятно!!!
Настройка путей и свои типы
В разделе extra можно добавить блок yiicomposer-paths
Где можно переназначить стандартные типы или добавить новые, а также для пакетов, у которых не указан тип
Настройки по умолчанию, которые не обязательно указывать, но при необходимости можно переназначить
"extra":{ "yiicomposer-paths":{ "module": "{vendor}/modules/{name}", "extension": "{vendor}/extensions/{name}", "framework": "{vendor}/framework", "yiisoft/yii": "$framework$" } }
Пути можно образовать несколькими способами
Составное формирование пути, основываясь на следующих переменных:
{vendor} – путь к папке для хранения всех пакетов берётся из основных настроек "vendor-dir"
{type} – тип пакета, если указан (пример yii-extension-test - {type} будет равен extension)
Тип пакета можно указать как в настройках пакета (в файле composer.json параметр "type" пакета) так и в настройках проектного файла в разделе "yiicomposer-paths" как для пакета yiisoft/yii установлен тип framework. Тип задаётся в нескольких форматах для параметра type в пакете yii-{type} или yii-{type}-{name} или в проектном файле в разделе "yiicomposer-paths" в формате ${type}$ или ${type}-{name}$
Если тип пакета задан но не описан в "yiicomposer-paths" то по умолчанию папка "{vendor}/{type}/{name}"
{package} – название пакета оригинальное (пример mihaildev/testextension будет равен mihaildev/testextension)
{name} – название по умолчанию берётся из названия пакета вторая часть (пример "name": "mihaildev/testmodule" {name} равен testmodule), если название установлено в типе пакета, то yiicomposer возьмёт его (пример yii-extension-test - {name} будет равен test) также можно переназначить и в настройках (пример "clevertech/yii-booster": "$extension-yii-booster$" {name} будет равен yii-booster)
Пример использования
{ "minimum-stability" : "alpha", "config":{ "vendor-dir": "www/protected/vendor" }, "require": { "mihaildev/yiicomposer": "dev-master", "mihaildev/testmodule": "dev-master", "mihaildev/testextension": "dev-master", "yiisoft/yii": "dev-master" } }
Важно чтоб mihaildev/yiicomposer был первым в списке требуемых и был установлен первым!!! Иначе он не сработает.
При тестировании было замечено, что ,если один из пакетов был ранее закеширован, то появляется вероятность установки закешированных пакетов первыми, что приведет к ошибкам в путях.
В примере указан параметр "minimum-stability" : "alpha" потому что данный проект ещё открыт для изменений, я хочу получить окончательную критику и при необходимости доработать
Подстановка
Допустим у нас есть сторонняя библиотека "clevertech/yii-booster", у которой не описан тип.
Мы добавляем запись "clevertech/yii-booster": "$extension-yii-booster$"
Данная форма записи заполняет пробелы информации, которой не хватало для нормальной работы
"$extension-yii-booster$" – выделенная часть укажет, каким правилом надо воспользоваться для формирования пути
"$extension-yii-booster$" – выделенная часть будет использована в правиле как переменная {name},
что в свою очередь позволит получить адрес типа extension и сформирует путь path/to/vendor/extensions/yii-booster
Хочу сказать, что можно было бы сделать и такую запись "clevertech/yii-booster": "$extension$" так как {name} берётся изначально из второй части названия пакета ("clevertech/yii-booster" вторая часть yii-booster) то у нас получился абсолютно такой же результат.
Пример использования:
{ "minimum-stability" : "alpha", "config":{ "vendor-dir": "www/protected/vendor" }, "extra":{ "yiicomposer-paths":{ "extension": "{vendor}/extensions/{name}", "clevertech/yii-booster": "$extension-yii-booster$", "yiiext/migrate-command": "$extension$" } }, "require": { "mihaildev/yiicomposer": "dev-master", "mihaildev/testmodule": "dev-master", "mihaildev/testextension": "dev-master", "yiisoft/yii": "dev-master", "clevertech/yii-booster": "v2.0.0", "yiiext/migrate-command": "dev-master" } }
Продумывая настройку путей, я старался упростить и увеличить гибкость использования.
Приведу несколько примеров использования
Точное назначение папки
{ "minimum-stability" : "alpha", "config":{ "vendor-dir": "www/protected/vendor" }, "extra":{ "yiicomposer-paths":{ "yiiext/migrate-command": "www/protected/vendor/extensions/migrate-command" } }, "require": { "mihaildev/yiicomposer": "dev-master", "mihaildev/testmodule": "dev-master", "mihaildev/testextension": "dev-master", "yiisoft/yii": "dev-master", "yiiext/migrate-command": "dev-master" } }
Свои типы
{ "minimum-stability" : "alpha", "config":{ "vendor-dir": "www/protected/vendor" }, "extra":{ "yiicomposer-paths":{ "sometype": "{vendor}/some/{name}" "yiiext/migrate-command": "$sometype-hochutut$" "mihaildev/testextension": "$sometype-hochutut2$" } }, "require": { "mihaildev/yiicomposer": "dev-master", "mihaildev/testmodule": "dev-master", "mihaildev/testextension": "dev-master", "yiisoft/yii": "dev-master", "yiiext/migrate-command": "dev-master" } }
В данном примере мы добавили тип "sometype",а также переопределили пути для пакетов,что приведёт к установке пакетов в папки:
yiiext/migrate-command в рath/to/vendor/some/hochutut и
mihaildev/testextension в рath/to/vendor/some/hochutut2
С управлением путей разобрались, перейдём ко второй части YiiComposer
Запуск консольных команд после обновления
В раздел scripts вносим следующую запись
"post-update-cmd": "YiiComposer\\Console::update"
Пример
{ "minimum-stability" : "alpha", "config":{ "vendor-dir": "www/protected/vendor" }, "extra":{ "yiicomposer-paths":{ "clevertech/yii-booster": "$extension-yii-booster$", "yiiext/migrate-command": "$extension$" } }, "require": { "mihaildev/yiicomposer": "dev-master", "mihaildev/testmodule": "dev-master", "mihaildev/testextension": "dev-master", "yiisoft/yii": "dev-master", "clevertech/yii-booster": "v2.0.0", "yiiext/migrate-command": "dev-master" }, "scripts":{ "post-update-cmd": "YiiComposer\\Console::update" } }
По умолчанию для запуска консольного приложения используется файл с настройками, находящийся по адресу path/to/vendor/../config/console.php,
так как я предполагаю, что пользователи будут хранить папку vendor в папке protected, но при необходимости можно установить пременную "yiicomposer-console-config" указав путь к файлу с настройками.
Пример:
{ "minimum-stability" : "alpha", "config":{ "vendor-dir": "www/protected/vendor" }, "extra":{ "yiicomposer-console-config":"www/protected/config/console.php", "yiicomposer-paths":{ "clevertech/yii-booster": "$extension-yii-booster$", "yiiext/migrate-command": "$extension$" } }, "require": { "mihaildev/yiicomposer": "dev-master", "mihaildev/testmodule": "dev-master", "mihaildev/testextension": "dev-master", "yiisoft/yii": "dev-master", "clevertech/yii-booster": "v2.0.0", "yiiext/migrate-command": "dev-master" }, "scripts":{ "post-update-cmd": "YiiComposer\\Console::update" } }
По умолчанию выполняется только одна консольная команда yiic migrate
При необходимости можно добавить или переопределить список запускаемых команд настроив переменную "yiicomposer-console-commands"
Пример:
{ "minimum-stability" : "alpha", "config":{ "vendor-dir": "www/protected/vendor" }, "extra":{ "yiicomposer-console-config":"www/protected/config/console.php", "yiicomposer-console-commands":[ { "controller":"migrate" }, { "controller":"test", "action": "test", "params": { "param1": "value1", "param2": "value2", "param3": "value3" } } ], "yiicomposer-paths":{ "clevertech/yii-booster": "$extension-yii-booster$", "yiiext/migrate-command": "$extension$" } }, "require": { "mihaildev/yiicomposer": "dev-master", "mihaildev/testmodule": "dev-master", "mihaildev/testextension": "dev-master", "yiisoft/yii": "dev-master", "clevertech/yii-booster": "v2.0.0", "yiiext/migrate-command": "dev-master" }, "scripts":{ "post-update-cmd": "YiiComposer\\Console::update" } }
Процесс:
Запускаем install (php composer.phar install)– при первом запуске консольные команды не запускаются я специально это сделал для того чтоб после сборки можно было проверить и настроить файл console.php (внести настройки БД и т.д.)
Запускаем update (php composer.phar update)– при втором запуске и последующих запусках консольные команды будут выполняться сразу после успешной сборки.
Ещё думаю проработать работу с языковыми пакетами!!!
В качестве примера использования, я собрал себе заготовку инструментов для создания проектов.
Рассчитан на работу с Денвером, но немного изменив можно и подо что угодно. https://github.com/M...-composer-blank
Как пользоваться заготовкой
Регистрируем на Денвере сайт допустим testproj.com (создаём папку у меня Y:\home\testproj.com)
Скачиваем архив распаковываем так чтоб фаил composer.json был в папке path/to/testproj.com (у меня Y:\home\testproj.com\composer.json)
В консоли переходим в папку Y:\home\testproj.com
Скачиваем туда composer.phar
Запускаем php composer.phar install
Что вы получите:
Главная страница
Страница контактов
Страница о нас
Бэкенд
Приложения
"mihaildev/elfinder" – (виджеты для работы с Файл менеджером http://elfinder.org/ подстраевается под работу с yii-booster)
"mihaildev/filesystem" – набор инструментов для работы с файлами
"mihaildev/backend" – приложение умеющее отделять бэкенд от фронтенда
"mihaildev/oneuser" – маленькое приложения для того чтоб не создавать пользовательский модуль то есть на сайте есть только один пользователь
"clevertech/yii-booster" - http://yiibooster.clevertech.biz/
"yiisoft/yii": "1.1.14" - Yii
"yiiext/migrate-command" – приложение для работы с модульными миграциями
В набор инструментов скоро войдёт приложение для работы с почтой и изображениями.