В версии Cotonti Siena 0.9.23 добавлена поддержка Composer - менеджера пакетов для PHP.
Composer – это пакетный менеджер зависимостей, предназначенный для упрощения загрузки и установки сторонних php библиотек в проект. Например, с его помощью очень легко добавить в разрабатываемое расширение или проект необходимые библиотеки.
composer.json - это текстовый файл, в котором в формате JSON описаны все сторонние библиотеки (пакеты) от которых зависит данный проект. Кроме того он может содержать информацию о проекте, минимальную версию PHP, необходимую для работы проекта, необходимые расширения PHP.
composer.lock - содержит текущий список всех установленных зависимостей и их версии. Основное назначение этого файла заключается в полном сохранении среды, в которой ведется разработка и тестирование проекта.
Например если вы ведёте коллективную разработку, то ваш коллега скачав (pull) проект с гит-репозитория должен получить тоже окружение и версии всех пакетов, что и у вас.
При деплое проекта в продакшен нужно на сервере получить те же самые версии пакетов, что и в dev среде. Это позволяет убедиться в том, что в любом месте, где разворачивается получает ваш проект, пакетное окружение будет идентично тому, которое вы использовали при разработке, и помогает избежать ошибок, которые могли бы возникнуть из-за обновления версий.
Прежде всего у Вас должен быть установлен сам Composer.
Здесь мы добавим в создаваемое расширение Cotonti HTTP клиент Guzzle, который позволяет отправлять как синхронные, так и асинхронные запросы к удаленном серверам, используя один и тот же интерфейс. Отличный инструмент для интеграции с различными API.
А также мы будем использовать Flysystem для загрузки файлов в удаленное хранилище.
Эти фичи будут использоваться только для примера и никак между собой не связаны.
Итак приступим.
Следуя инструкциям по установке Guzzle добавим в файл composer.json который находится в корне проекта в секцию require
"guzzlehttp/guzzle": "^7.8"
Получится что то вроде этого:
"require": { "php": ">=5.6", "ext-gd": "*", "ext-mbstring": "*", "ext-json": "*", "ext-hash": "*", "ext-pdo": "*", "guzzlehttp/guzzle": "^7.8" },
Далее в командной строке выполнить:
> composer update
Эта команда обновит все зависимости установленные в проекте до последних версий (в соответствии с composer.json), установит новые зависимости, которые появились в файле composer.json и удалит те, которых в этом файле больше нет. После этого Composer обновит файл composer.lock.
Теперь наш HTTP клиент готов к использованию.
В PHP-файл нашего расширения добавим:
<?php use GuzzleHttp\Client; // Создаем экземпляр клиента с базовым URI $client = new Client(['base_uri' => 'https://foo.com/api/']); // Отправим POST-запрос application/x-www-form-urlencoded на адрес https://foo.com/api/test $response = $client->request('POST', '/test', [ 'form_params' => [ 'field_name' => 'abc', 'other_field' => '123', 'nested_field' => [ 'nested' => 'hello', ], ], ]); $body = $response->getBody(); echo $body;
Просто, не так ли?
Теперь займемся загрузкой файлов на удаленный сервер:
Как и указано в документации добавим в файл composer.json в секцию require
"league/flysystem": "^3.0", "league/flysystem-aws-s3-v3": "^3.0"
Снова:
> composer update
Все готово. Можем использовать библиотеку в своем расширении.
<?php use Aws\S3\S3Client; use League\Flysystem\AwsS3V3\AwsS3V3Adapter; use League\Flysystem\Filesystem; // For some reason AWS adapter works this way only putenv('AWS_ACCESS_KEY_ID=my-access-key'); putenv('AWS_SECRET_ACCESS_KEY=my-secret-key'); /** @var S3ClientInterface $client */ $client = new S3Client([ 'version' => 'latest', 'endpoint' => 'https://storage.yandexcloud.net', 'region' => 'ru-central1', ]); // The internal adapter $adapter = new AwsS3V3Adapter( $client, // S3Client 'test-new-bucket', // Bucket name 'path/to/upload/dir' // path prefix ); // FilesystemOperator готов и сконфигурирован. Можно использовать. $fileSystem = new Filesystem($adapter); // Запись в файл $filesystem->write($path, $contents);
Вот и все. Не забудем добавить в инструкцию по установке нашего расширения необходимость добавить в composer.json следующие строки и выполнить composer update:
"guzzlehttp/guzzle": "^7.8", "league/flysystem": "^3.0", "league/flysystem-aws-s3-v3": "^3.0"
чтобы пользователи знали как правильно установить наше расширение.
Наш проект готов. Он находится под контролем версий Git. Пора перенести его на продакшен сервер.
У нас в папке lib/vendor появились новые вложенные папки с зависимостями, которые добавил туда Composer.
Добавим их в .gitignore
. Нет необходимости добавлять их в репозиторий нашего проекта и увеличивать его размер.
Коммитим изменения и отправляем их в репозиторий.
Заходим на сервер по SSH и переходим в папку с проектом.
Выполняем
> git pull
Потом
> composer install
В отличие от composer update
эта команда установит все зависимости, перечисленные в composer.lock и именно те версии зависимостей, которые в нем указаны. Если этого файла нет в корне проекта, то эта команда ведет себя аналогично composer update
и использует composer.json для установки зависимостей.
Ну вот и все. Заходим через браузер на наш сервер и радуемся тому что получилось.