symfony2: come integrare una libreria php che non è un pacchetto

Sto cercando di integrare Agile CRM nella mia applicazione Symfony2.

C'è una libreria PHP fornita da Agile: https://github.com/agilecrm/php-api

Tuttavia non è un pacchetto.

Come posso integrarlo correttamente nella mia applicazione? Dovrei inserire una richiesta una volta nel mio app.php o nel mio kernel? O c'è un modo migliore?

Il compositore ha una function per caricare automaticamente i file

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

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

Altri modi ?

Esporre la funzionalità come servizio utilizzando il codice fornito nella libreria.

Penso che il modo migliore per farlo sia:

  • contribuire al progetto per aggiungere un composer.json
  • contribuire a consentire la configuration della configuration da altrove invece di essere codificata

Quindi sarai abile a usare semplicemente il compositore per caricare quel pacchetto. 🙂

Il compositore (come menzionato in altre risposte) è solo un manager delle dependencies e quindi solo una parte della soluzione. Se sei veramente interessato al modo più pulito, è piuttosto semplice: scrivi il pacchetto tu stesso.

In effetti, ci sono molti esempi di bundle che funzionano come livelli di integrazione per le librerie di terze parti. Ad esempio, guarda https://github.com/nelmio/alice , un bundle Symfony2 che serve a racchiudere Faker, una libreria di dati esterna.

Un pacchetto può dichiarare che le opzioni di configuration sono sovrascrivibili dai file di configuration principali dell'app. Può esporre le definizioni del servizio per gli oggetti della libreria in modo da evitare di crearli manualmente e iniettarli quando necessario (indipendentemente dal fatto che la libreria sia scritta o less con la DI in mente). Può essere utile anche per le estensioni di branchscelli, gli ascoltatori di events e così via.

Un buon pacchetto scritto promuove il riutilizzo, la testabilità e la separazione delle preoccupazioni. Non aver paura di scrivere il tuo pacchetto da zero, inizia qui http://symfony.com/doc/current/cookbook/bundles/best_practices.html

Dovresti aggiungerlo al tuo compositore.json

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

oppure puoi aggiungerlo al caricatore automatico del compositore https://getcomposer.org/doc/01-basic-usage.md#autoloading

Poiché agilecrm/php-api non è disponibile su Packagist, l'approccio migliore sarebbe quello di aggiungere il repository al file compositore.json e quindi installare il pacchetto nello stesso modo in cui si farebbe con tutto il resto.

 { //... "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" } //... }