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

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

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

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

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

1

Решение

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

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

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

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

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

5

Другие решения

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

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

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

2

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

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

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

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

2

Как 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"}
//...
}
1

Вы должны добавить его в свой 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

0