Установка composer. Осваиваем Composer. Как создать собственный Composer пакет

2014

Как установить Composer на OpenServer ?

Наверное наиболее часто задаваемым вопросом является использование и установка утилиты Composer. Это де-факто стандарт в области менеджеров зависимостей для PHP. При работе с ним можно не бояться об использовании старых библиотек, которые использует ваш проект, ведь Composer установит нужные библиотеки за вас! В этой статье я не буду рассматривать как использовать этот замечательный инструмент, но расскажу как настроить его взаимодействие с OpenServer.

Обычно, при попытки установить Composer на Windows с установленным и запущенным OpenServer"ом вызывает проблему: Composer не хочет устанавливаться по причине ошибки openssl, которая в вашем проекте выключена.Конечно же, при открытии php.ini через openserver вы обнаружите что соблюли все требования, однако Композер все равно будет ругаться.

Решить это можно довольно просто, всего в 3 шага:

  • Шаг 1 - устанавливаем нужные нам версию PHP и Apache в настройках openserver"а.
    Помните! Версия должна быть не ниже PHP 5.3.2!
  • Шаг 2 - В OpenServer открываем: Дополнительно -> Конфигурация -> PHP .....
    Проверяем наличие раскомментированного extension=php_openssl.dll
  • Шаг 3 - Включаем Консоль OpenServer"a: Дополнительно -> Консоль.
    Коммандами консоли windows переходим в папку используемого php. Я использую php-5.5.6 и моя команда выглядит так: cd modules/php/PHP-5.5.6/

    Затем выполняем комманду:

    Php -r "readfile("https://getcomposer.org/installer");" | php

    После чего, если все успешно вы увидите надпись:

    All settings correct for using Composer Downloading... Composer succesfully installed to: /Composer.phar User it: php composer.phar

Готово! Composer установился и набрав комманду:

Php composer.phar -V

Вы должны увидеть запись подобного рода:

Composer version

Echo @php "%~dp0composer.phar" %*>composer.bat

Она создаст.bat файл и в дальнейшем можно будет работать без указания php composer.phar, просто указывая composer Т.е. команда проверки версии (которая была выше) будет выглядеть так:

Composer -V

Что согласитесь гораздо удобнее.


Меня зовут Андрей Николаев , я разработчик-фрилансер с более чем четырехлетним опытом работы в сфере веб-технологий. Последнее время занимаюсь разработкой и поддержкой lowload и midload проектов, разработкой веб-сайтов на платформе 1С-Битрикс, Yii, Laravel . Предоставляю услуги как разработчика сайта, так и консультанта , а при необходимости и менеджера проекта со стороны заказчика.

Обо мне

Посредством визуального редактора Kompozer создание Web страниц превращается в легкое и увлекательное занятие. Больше не требуется изучать язык разметки HTML или разбираться в каскадных таблицах стилей. Все, что следует - запустить описываемую программу, с помощью специальных инструментов выбрать фоновый рисунок будущего сайта и наполнить его текстовой и графической информацией. Любой компьютерный пользователь способен разобраться в функционале данного визуального редактора и создать привлекательную Web страницу.

Причем выгрузить ее в Интернет получится не выходя из программы (для этого разработчики предусмотрели удобный FTP проводник, подключающийся непосредственно к хостингу после введения пароля и логина).

Основные возможности Kompozer

Главная возможность Композер - верстка страниц простым добавлением элементов с панели управления. Пользователь способен быстро создавать таблицы, управляющие формы и информационное наполнение. Параметры любых элементов (расположение и размер) изменяются простым перетаскиванием. Также интересная возможность этого визуального редактора заключается в ручном редактировании кода. Она предназначена для опытных пользователей, желающих подправить шаблон или задать собственные характеристики, недоступные через встроенную панель управления. HTML и CSS коды редактируются в удобном встроенном редакторе, поэтому экспортировать их в другие приложения нет необходимости. Выгрузить сайт на хостинг возможно через FTP.

Как пользоваться редактором

Для начала желательно Kompozer на русском скачать, чтобы не возникло проблем с пониманием интерфейса и функций. Затем в программе нужно ввести пароль и логин доступа к хостингу - чтобы подключиться к нему и открыть нужные страницы. Файлы и директории сервера отобразятся в правом столбце. Для выбора достаточно нажать по наименованию страницы и подождать, пока она откроется в визуальном редакторе. Дальше пользователь может управлять элементами с помощью панели управления, активируя тот или иной инструмент. С помощью инструментов легко добавлять новые заголовки, изменять информационное наполнение и редактировать код. После работы нужно сохранить изменения и отредактированная страница загрузиться на сервер.


Версия: 0.8b3 RU
Лицензия: Бесплатная
Обновление:
Разработчик: Fabien Cazenave
Язык: Русский, Английский
ОС: Windows 10 / 8 / 7 / Vista / XP: (32 / 64-bit)
Размер файла: 6.6 Mb

Что это и зачем оно мне надо?

Если у тебя возник этот вопрос, тогда не читай дальше статью и сперва спроси у google “что такое dependency injection?” и зачем тебе нужен dependency manager (в частности ).

Лично у меня уже не существует приложений без composer-а. Особенно при разработке под фреймворк. Вот лишь коренные преимущества использования менеджера зависимостей в проектах:

  • Удобная установка и обновление сторонних пакетов и библиотек
  • Правильный деплоймент
  • Чужой код от сторонних пакетов не коммитится в свой репозиторий, и не мусорит код и статистику
  • Гибкое управление версиями зависимостей

Установка

Тут все максимально просто, но сперва надо определиться с методом использования: один composer для всего localhost-а или каждому проекту свой composer? (можно конечно и комбинировать)

Первый вариант удобен разработчикам которые одновременно трудятся над множеством приложений и все держат в чистоте и свежести. Второй вариант используется при требовании от приложения иметь точную и единую версию composer-а у всех разработчиков, и тут он коммитится в репозиторий.

Держим Composer вместе с приложением

Команды Composer

install

Установив и собрав свой composer.json можно приступить к установке тех самых пакетов которые мы указали в своем json-файле в блоке “require” и “require-dev”. Для этого мы используем команду install .

Composer install ./composer.phar install php composer.phar install

* Первая команда (строка 1) для тех кто выбрал метод установки единого для всей операционной системы. Вторая и третья нужны всем остальным и отличаются лишь тем, дали вы права на запуск phar-файла либо нет.

При первом запуске команды install мы получим последнюю либо точную версию всех пакетов которые мы указали в json-файле (в зависимости от того как мы указали версию для каждого отдельного пакета). Повторный запуск команды install ни к чему не приведет – и это важный момент!

Во время исполнения install скачает все библиотеки в папку vendor нашего проекта (ниже опишу как сменить этот путь), а рядом с json -файлом будет создан новый файл composer.lock (это снепшот – слепок установленных пакетов с указанием их точных версий). Папку vendor стоит сразу же поместить в .gitignore , дабы случайно не смешать все со своим кодом. А вот lock -файл наоборот, нужно закомитить и отправить в репозиторий. Если удалить папку vendor или некоторые пакеты из него а потом опять вызвать команду install , то все пакеты будут восстановлены с точно теми же версиями которые были установлены при первом вызове install . Так происходит, потому что проверяет наличие lock -файла, и при его наличии игнорирует версии пакетов указанные в json-файле (только если те не были спущены!), и устанавливает версии указанные в lock -файле.

Таким образом, передавая единый lock -файл между всеми разработчиками, команда будет гарантировано иметь одинаковые версии пакетов (думаю не стоит пояснять зачем).

update

При необходимости же обновить версии пакетов до актуальных – вызываем команду update .

Composer update ./composer.phar update php composer.phar update

После чего все пакеты будут обновлены. Так же будет обновлен и lock -файл.

Тут стоит помнить что обновляться пакеты будут в соответствии с форматом версии указанным для каждого из них отдельно в json -файле. Синтаксис указания версий для пакетов хорошо описан в официальной документации .

self-update

Еще одна полезная команда, которая обновит сам .

Composer self-update ./composer.phar self-update php composer.phar self-update

show

./composer.phar show -s -t ./composer.phar show -i -t

Эта команда отображает список установленных пакетов.

Первый пример (с ключом -s ) отобразит дерево пакетов которые мы сами руками указали в json -файле.

Второй пример (с ключом -i ) отобразит абсолютно все установленные пакеты, рекурсивно включая зависимости всех наших первоначальных пакетов.

Ключ -t меняет отображение ответа в стиль дерева зависимостей.

vendor path или как сменить путь установки библиотек

Для изменения пути установки пакетов, необходимо использовать директиву vendor-dir в json -файле. Вот пример:

{ "name": "My Project", "description": "Project description", "homepage": "http://my-project.com/", "config": { "vendor-dir": "/vendor/custom/path" }, "require": { "php": ">=5.3.3", "zendframework/zendframework": "2.*" }, "require-dev": { "zendframework/zftool": "v0.1.0", "zendframework/zend-developer-tools": "dev-master" } }

Заключение

Я постарался описать все основное что может понадобится для знакомства с Composer-ом. Более глубокие фичи лучше изучать по документации . Например: как подключить загрузку собственной библиотеки с github .

А для удобного поиска необходимых пакетов советую пользоваться проектом packagist.org

Если же возникнут вопросы, смело пишите в комментарии.

Ну что, на прошлом уроке мы фактически закончили писать ядро нашего сайта, и с этого момента я предлагаю завязать с велосипедостроением и припасть к достижениям мирового сообщества.

А именно - начать использовать менеджер зависимостей для PHP - Composer . Он позволит нам легко устанавливать разные полезные вещи на сайт, обновлять их и даже удалять. Если вы уже работали с менеджером пакетов GNU/Linux - то вам всё это будет очень знакомо.

В качестве разминки, удалим Fenom из директории core и установим через Composer. Для этого нужно в корне сайта создать файл composer.json и прописать в нём требуемые пакеты (подробнее можно прочитать на Хабре):
{ "require": { "php":">=5.3.0", "fenom/fenom": "2.*" } } Теперь нужно только скачать composer.phar и запустить его в корне сайта:
php composer.phar install На modhost.pro и качать ничего не нужно - просто запускаем composer в директории:
composer install И волшебным образом у нас появляется директория /vendor/ с установленным Fenom. Что же с ним делать дальше?

Принцип работы

Давайте немного остановимся, и я объясню, как именно функционирует Composer, если вы еще не знаете.

Composer - это менеджер пакетов, который работает с ними согласно правил в composer.json . То, что мы там напишем, и будет устанавливаться.

При установке пакетов Composer пробегается по их правилам и генерирует самый важный файл - /vendor/autoload.php , который загружает все скачанные классы. Нам, выходит, нужно только подключить этот файл в своём проекте, и с этих пор мы можем запускать свои классы без require :
$Fenom = new Fenom::factory($tplDir, $compileDir); То есть, система уже знает, где физически находится Fenom и нам не нужно делать reuire_once("путь к fenom"). Также нам не нужно держать сам Fenom в своём проекте, достаточно хранить там наш composer.json .

Еще раз, для закрепления:

  1. Пишем composer.json
  2. Устанавливаем пакеты через composer.phar
  3. Подключаем в проект /vendor/autoload.php
  4. Используем любые установленные классы через new Class()
Лишних файлов в проекте нет, лишних require нет, установленные пакеты обновляются через тот же composer:
php composer.phar update Всё очень просто и удобно. Стоит только раз использовать такую схему работы и велосипедить дальше уже просто невозможно!

Подключаем Fenom

Для работы с установленными пакетами нам нужно просто добавить autoload.php в наш класс Core :
function __construct(array $config = array()) { $this->config = array_merge(array("controllersPath" => dirname(__FILE__) . "/Controllers/", "templatesPath" => dirname(__FILE__) . "/Templates/", "cachePath" => dirname(__FILE__) . "/Cache/", "fenomOptions" => array("auto_reload" => true, "force_verify" => true,),), $config); // Например, вот тут require_once dirname(dirname(__FILE__)) . "/vendor/autoload.php"; } Из метода getFenom() теперь можно выбросить проверку и подключение файлов, а также загрузку его классов. Итоговый метод выглядит так:
public function getFenom() { if (!$this->fenom) { try { if (!file_exists($this->config["cachePath"])) { mkdir($this->config["cachePath"]); } $this->fenom = Fenom::factory($this->config["templatesPath"], $this->config["cachePath"], $this->config["fenomOptions"]); } catch (Exception $e) { $this->log($e->getMessage()); return false; } } return $this->fenom; } Просто вызываем Fenom::factrory - и он сам загрузится. Вот коммит с изменениями - смотрите, сколько кода мы убрали сразу из своего проекта!

Зачем нам таскать с собой Fenom и обновлять его вручную, если давно придуман Composer, который об этом позаботится гораздо лучше? Всё, что нам нужно - положить в корень проекта composer.json .

Давайте теперь отрефакторим и наш собственный проект, чтобы он также подключался в autoload.php.

При этом, физически файлы должны быть разложены в таких же директориях, чтобы загрузчик знал где их искать. Как именно это работает расписано в официальных стандартах, но я вам советую проглядеть .

Отсюда следует два вывода: Composer можно использовать только в PHP 5.3+, и наш проект нужно переписать так, чтобы он использовал пространства имён.

Первым делом, нужно определить имя для нашего проекта. Пусть будет Brevis - от латинского «короткий». Теперь наша директория /core/ - это пространство имён Brevis. Значит:

  • Класс Core становится \Brevis\Core и находится в core\Core.php
  • Класс Controller становится \Brevis\Controller и находится в core\Controller.php
  • Класс Controlles_Home становится \Brevis\Controllers\Home и находится в core\Controllers\Home.php
  • Класс Controlles_Test становится \Brevis\Controllers\Test и находится в core\Controllers\Test.php
Обратите внимание, что физическое расположение файлов совпадает с пространством имён. Это потому, что мы уже следуем стандарту PSR-4 .

Теперь в начале каждого класса пишем используемое пространство имён. У основных классов это:
PhpStorm сразу начинает подсвечивать нам все использования Exception и Fenom как неправильные, потому что они вызываются внутри пространства имён, но без указания полного имени. Тут 2 варианта исправления:

  1. Пробежаться по всему коду и добавить к именам этих классов \, чтобы было \Exception и \Fenom
  2. Не страдать фигнёй, а использовать псевдонимы - возможность указать короткое имя для класса
Конечно, выбираем второй вариант:
Теперь переименовываем контроллеры и указываем в них псевдонимы:

Перемещаем autoload.php из класса \Brevis\Core в index.php, потому что пространство имён Brevis у нас скоро и само будет работать через автозагрузку и лишние require ему не нужны.

Index.php теперь выглядит вот так:
require_once dirname(__FILE__) . "/vendor/autoload.php"; $Core = new \Brevis\Core(); $req = !empty($_REQUEST["q"]) ? trim($_REQUEST["q"]) : ""; $Core->handleRequest($req);
Метод \Brevis\Core::handleRequest() переписываем, убирая всякие проверки файлов. Нам нужно проверять только наличие класса, используя get_class() :
public function handleRequest($uri) { $request = explode("/", $uri); $className = "\Brevis\Controllers\\" . ucfirst(array_shift($request)); /** @var Controller $controller */ if (!class_exists($className)) { $controller = new Controllers\Home($this); } else { $controller = new $className($this); } $initialize = $controller->initialize($request); if ($initialize === true) { $response = $controller->run(); } elseif (is_string($initialize)) { $response = $initialize; } else { $response = "Возникла неведомая ошибка при загрузке страницы"; } echo $response; } Как видите, мы определяем полное имя загружаемого контроллера, проверяем его наличие, а если такого контроллера нет - загружаем \Brevis\Controllers\Home .

В общем, вся логика осталась прежней, а количество кода сократилось. Нет ручной работы с файлами, нет никаких require, вся работа по подключению классов лежит на autoload.php. Соотвественно, и параметр controllersPath из системного конфига пропадает.

Осталось добавить и наш собственный проект в автозагрузку. Для этого меняем composer.json вот так:
{ "name": "Brevis", "autoload": { "psr-4": { "Brevis\\": "core/" } }, "require": { "php": ">=5.3.0", "fenom/fenom": "2.*" } } Блок autoload указывает, что загружать дополнительно, кроме установленных пакетов. Ключ psr-4 указывает, как именно загружать наш проект, и указывает директорию core/ как основную для пространства имён Brevis .

Запускаем
php composer.phar update и наши классы попадают в автозагрузку. Всё должно работать, смотрим изменения на GitHub .

Заключение

Вот мы и переписали наш проект в соотвествии с последними стандартами в мире программирования на PHP. Согласитесь, было не так уж и страшно?

Зато теперь наш код чистенький, опрятненький, соотвествует стандартам и отлично работает!

На следующем занятии мы установим через Composer xPDO 3.0 (да-да, он уже переписан и поддерживает namespaces, хоть пока и только в dev-ветке) и подключим его к нашей БД.

Напишем схему, сгенерируем по ней модель и создадим пару таблиц.

В настоящее время при разработки современных приложений используют пакетные менеджеры для управления зависимостями. При разработке на PHP используют Composer. Если вы PHP-разработчик то вы либо уже используете Composer, либо уже что-то слышали о нём. А если не слышали, то вам будет интересно и полезно прочитать данную статью. В статье будут показаны практические примеры с приложенными скриншотами и листингом кода.

Пакетные менеджеры упрощают установку и обновление сторонних библиотек, от которых зависит ваш проект. Они позволяют установить и подключить стороннюю библиотеку одной командой в консоли, после чего вы сразу же сможете использовать библиотеку (набор классов) в своем коде.

Это пакетный менеджер, который предоставляет средства по управлению зависимостями и управлением автозагрузкой в PHP-приложении. Пакеты устанавливаются внутрь вашего проекта и доступны только в нём.

Установка Composer

Официальная страница, на которой вы можете найти информацию по установке Composer, находится . Однако, если вы используете ОС на базе GNU/Linux, то проще всего установить Composer с помощью пакетного менеджера вашей операционной системы. Например для Ubuntu:

sudo apt install composer

Для Windows-пользователей придется воспользоваться инструкцией, ссылка на которую была дана выше.

Использование Composer

Если вы хотите использовать сторонние библиотеки, то при создании проекта на PHP или в уже готовом проекте вам необходимо инициализировать Composer для данного проекта. Инициализация всего лишь предполагает создание файла composer.json в корне вашего проекта с нужными вам параметрами. Проще всего это сделать в автоматизированном режиме командой composer init находясь в корневой директории вашего проекта

Package name — название вашего проекта(пакета). Обычно пишется в формате /Где vendor — название организации или разработчика, а package — название проекта или библиотеки.

Description — описание приложения.

Для примера я создам директорию для проекта и первым делом инициализирую в нём Composer

Теперь в проекте есть файл package.json , в который мы можем добавлять списо зависимостей.

Зависимости бывают двух типов: обычные и девелоперские.

Обычные зависимости — это зависимости, которые будут использоваться в исходном коде проекта и необходимы для его работы. К нип относятся различные подключаемые и используемые библиотеки.

Девелоперские зависимости — зависимости, которые нужны лишь на этапе написания кода и не нужны в продакшене. Например библиотеки для тестирования, на продакшене они совсем необязательны.

Для добавления зависимости к проекту можно использовать команду следующего вида

composer require somepackage/somepackage:someversion

Например нам необходимо в проекте сгенерировать файл для Excel, для этого нам нужно было бы разобраться как устроены такие файлы и написать код, который будет создавать такой файл — это всё очень долго. С Composer мы можем просто найти готовую билбиотеку, подключить её и использовать удобный API для создания таких файлов.

Давайте подключим такую библиотеку, для примера возмём PHPExcel . Найти библиотеки можно на сайте https://packagist.org/

composer require PHPOffice/PHPExcel

После чего Composer скачает данную библиотеку и пропишет зависимость в package.json

Содержимое package.json изменилось, а в корне проекта появилась директория vendor с файлами установленной библиотеки. При переносе исходного кода, например при использовании системы контроля версий (Git etc.), совсем необязательно тянуть с собой директорию vendor . Достаточно переностить проект без нее, а затем выполнять composer install в корне проекта. Composer скачает и установит пакеты, прописанные в package.json

Если вы хотите обновить ваши пакеты до совместимых версий выше, то используйте команду composer update

Использование подключенных пакетов

Для использования установленных Composer’ом библиотек, необходимо добавить автозагрузку. В современных приложениях используется паттерн front controller, он позволяет иметь единую точку доступа в приложение. То есть все запросы к приложению заходят в него, а он определяет каким контроллером должен формироваться респонс. Если в вашем приложении такого нет, то страшного нет ничего, вам просто придётся подключать файл автозагрузки во всех местах, где вы собираетесь использовать установленные библиотеки.

Например, у меня приложение состоит из одного файла — index.php, автозагрузку мне необходимо написать в нём.

index.php с подключенной автозагрузкой выглядит следующим образом

Всё, везде ниже можно теперь использовать подключенные библиотеки.

Давайте воспользуемся установленной библиотекой и напишем приложение, которое сгенерирует файл для Excel с записю Hello, world! в первой ячейке.

Вдаваться в подробни как работать с PHPExcel не будем, т.к. это уже было описано в статье , поэтому сразу приведу код файла index.php

setActiveSheetIndex(0); $sheet->setCellValueByColumnAndRow(0, 1, "Hello, world!"); $objWriter = \PHPExcel_IOFactory::createWriter($document, "Excel5"); $objWriter->save("Hello.xls");

require_once "vendor/autoload.php" ;

$document = new \ PHPExcel () ;

"Excel5" ) ;

$objWriter -> save ("Hello.xls" ) ;

Как видите, в коде мы используем классы, предоставленные библиотекой PHPExcel.

Запустим скрипт командой

php index.php

Он отработает и создаст файл Hello.xls, открыв который, можно обнаружить следующее

Composer значительно упрощает разработку, вам нет необходимости скачивать откуда-то готовые библиотеки и скрипты, а затем подключать их с помощью include. Composer всё делает за вас сам. При этом, при переносе кода вашего проекта, вам не нужно тянуть готовые библиотеки, вы можете перенести только свой код, а затем просто установить эти библиотеки с помощью Composer.

Надеюсь статья оказалась вам полезной и вы узнали о Composer и теперь облегчите себе жизнь, применяя его.

Для вас это может быть интересно: