symfony2: как интегрировать библиотеку php, которая не является пакетом

Я пытаюсь интегрировать Agile CRM в мое приложение Symfony2.

Agile предоставляет библиотеку PHP: https://github.com/agilecrm/php-api

Однако это не связка.

Как я могу правильно интегрировать его в свое приложение? Должен ли я добавить требование один раз в мой app.php или мое ядро? Или есть лучший способ?

5 ответов

Composer имеет функцию автоматической загрузки файлов

https://getcomposer.org/doc/04-schema.md#files

{
    "autoload": {
        "files": ["src/MyLibrary/functions.php"]
    }
}

Другие способы?

Представьте функциональность как Сервис, используя код, предоставленный в библиотеке.

Я думаю, что лучший способ сделать это:

  • внести свой вклад в проект, чтобы добавить composer.json
  • внести свой вклад, чтобы позволить конфигурации загружаться из другого места, а не жестко закодированы

Тогда вы сможете просто использовать composer для загрузки этого пакета.:)

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

На самом деле, есть много примеров пакетов, которые работают как слои интеграции для сторонних библиотек. Например, посмотрите https://github.com/nelmio/alice, пакет Symfony2, предназначенный для обертывания Faker, библиотеки lib для внешних данных.

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

Хороший письменный пакет способствует повторному использованию, тестированию и разделению задач. Не бойтесь писать свой пакет с нуля, начните здесь http://symfony.com/doc/current/cookbook/bundles/best_practices.html

Как agilecrm/php-api недоступна в Packagist, лучший подход - добавить репозиторий в файл composer.json, а затем установить пакет так же, как и во всем остальном.

{
    //...
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "agilecrm/php-api",
                "version": "2.1.0",
                "source": {
                    "url": "https://github.com/agilecrm/php-api",
                    "type": "git",
                    "reference": "2.1.0"
                }
            }
        }
    ],
    "require": {
        //...
        "agilecrm/php-api": "2.1.0"
    }
//...
}

Вы должны добавить его в свой composer.json

{
        "require": {
            "agilecrm/php-api": "dev-master"
        },
        "repositories": [
        {
            "type": "vcs",
            "url":  "git@github.com:agilecrm/php-api.git"
        }
    ]
}

или вы можете добавить его в автозагрузчик композитора https://getcomposer.org/doc/01-basic-usage.md#autoloading

Другие вопросы по тегам