Facile gestione dei pacchetti con Composer

Ammettiamolo: il PHP ha avuto una storia trascorsa con la gestione dei pacchetti e, di conseguenza, è piuttosto raro trovare uno sviluppatore che utilizzi attivamente sistemi come PEAR. Invece, la maggior parte degli sviluppatori ha scelto il proprio framework preferito, che ha il codice scritto appositamente per gestire varie cose, come l'interazione con DB, ORM, OAuth, integrazione di Amazon S3, ecc..

Il rovescio della medaglia qui, però, è che i quadri di commutazione (o il ritorno a non utilizzare affatto un framework) possono essere un incubo, poiché implica il reimparare tutto per utilizzare strumenti nuovi di zecca - e questo non è un compito facile. Bene, il compositore può aggiustarlo!


introduzione

"La colla tra tutti i progetti."

Il compositore cerca di risolvere questa situazione posizionandosi come "la colla tra tutti i progetti" - il che significa che i pacchetti possono essere scritti, sviluppati e condivisi in un formato che altri sviluppatori possono collegare ad altre applicazioni con facilità.

Questo articolo si propone di mostrarti come installare e lavorare con i pacchetti di Composer. Alla fine di questo articolo, sarete in grado di collegare e giocare con blocchi di codice in qualsiasi framework, indipendentemente dal fatto che lavoriate con CodeIgniter, FuelPHP, Laravel, Symfony2, Lithium, Yii, Zend ... o qualsiasi altra cosa.


Passaggio 1: installazione di Composer

Composer ha due parti logiche principali: c'è un repository che memorizza i pacchetti, e poi c'è l'applicazione della riga di comando, che ti aiuta a trovare, scaricare, aggiornare e condividere il codice.

Installare l'applicazione su qualsiasi cosa Unix sia facile da usare:

$ cd / percorso / al / mio / progetto $ curl -s http://getcomposer.org/installer | php

È così facile! Ora avrai un composer.phar file elencato nel progetto, che contiene tutta la logica per l'utilità della riga di comando.

Puoi confermare che è stato installato eseguendo:

$ php composer.phar

Questo comando mostrerà tutti i comandi disponibili.

Una mia preferenza personale è eseguire un comando extra:

$ sudo mv compositore.phar / usr / bin / compositore

Questo si muove il file nel tuo cestino, che ti consente di accedere a tutti i comandi con un esempio molto più breve:

$ compositore circa

Se stai usando Windows, puoi semplicemente scaricare questo file ed eseguirlo attraverso l'interprete PHP, ovunque possa essere installato.


Passaggio 2: comprensione composer.json

Se sei uno sviluppatore Ruby, probabilmente conoscerai il Gemfile. Oppure, gli sviluppatori Node sapranno package.json. Allo stesso modo, Composer usa a composer.json file per specificare le impostazioni e i requisiti del pacchetto per l'applicazione.

Nella sua forma più semplice, il file del compositore sarà simile a questo:

"require": "kriswallsmith / assetic": "*"

Ciò richiederà il pacchetto "Assetic", creato da "kriswallsmith", e richiederà qualsiasi versione. Per specificare una versione specifica, puoi invece utilizzare:

"kriswallsmith / assetic": "1.0.3"

Puoi anche combinare i due approcci, in questo modo:

"kriswallsmith / assetic": "1.0. *"

Ciò consentirà di includere automaticamente eventuali aggiornamenti secondari, ma non l'aggiornamento alla versione 1.1.0, poiché potrebbe avere alcune modifiche all'interfaccia di cui uno sviluppatore dovrà prestare attenzione.


Passaggio 3: requisiti di installazione

Ora che hai uno o più pacchetti elencati nel tuo composer.json, puoi correre:

$ php compositore.phar installazione

... Oppure, se hai usato il mio trucco per accorciarlo su macchine Unix (vedi sopra):

$ compositore installa

Noterai ora i file scaricati e inseriti in un nuovo fornitori / cartella nella radice della tua applicazione. Questa logica può essere modificata utilizzando la seguente opzione di configurazione:

"require": "kriswallsmith / assetic": "1.0. *", "config": "vendor-dir": "pacchetti"

Passaggio 4: caricamento automatico

L'autoloading in PHP è stato un po 'un casino per qualche tempo.

L'autoloading in PHP è stato un po 'un disastro per un po' di tempo, dato che ogni sviluppatore ha i suoi modi di gestire le cose. Alcuni pacchetti, come Smarty, usano il proprio autoloading, alcuni sviluppatori inseriscono più classi in un unico file o hanno nomi di file minuscoli - è tutto molto casuale.

PSR-0 è uno standard, creato dal PHP Standards Group, per calmare questo casino; Il compositore lavorerà con esso di default. Il compositore include un autoloader PSR-0, che puoi includere nel tuo progetto con una sola riga:

include_once './vendor/autoload.php';

Ovviamente, se hai cambiato la directory del venditore, dovrai aggiornarla.

Ora puoi usare il codice nelle tue applicazioni:

dump ();

Questo è un esempio di Assetic in uso. Sì, c'è molto codice dello spazio dei nomi, ma questo è fatto per evitare conflitti tra i pacchetti. La convenzione di denominazione per PSR-0 è essenzialmente:

\\ (\) *

Un altro esempio potrebbe essere il pacchetto Buzz HTTP, che sembra così:

$ browser = nuovo Buzz \ Browser; $ response = $ browser-> get ('http://www.google.com'); echo $ browser-> getLastRequest (). "\ n"; echo $ risposta;

Potrebbe sembrare un glorificato file_get_contents (), ma gestisce tutti i tipi di logica intelligente in background per lavorare con HTTP Response / Request - e puoi vedere che la sintassi dello spazio dei nomi è un po 'meno intensa.


Passaggio 5: Real World

Se vuoi essere davvero intelligente, puoi automatizzare l'intero processo.

Attualmente, la maggior parte dei progetti memorizza tutte le dipendenze PHP nel repository di codice principale; quindi, se stai utilizzando l'SDK di Facebook, ad esempio, devi semplicemente inserire quella versione nel codice copiando il codice da GitHub o estraendo un file ZIP. Quindi, lo aggiungi al tuo sistema di controllo delle versioni e fai le modifiche.

Quella versione si trova quindi con il tuo codice come un file statico, che, a un certo punto, puoi o non ti ricordi di aggiornare - SE noti che Facebook ha rilasciato una versione aggiornata. La nuova versione del file va oltre le righe e tu metti anche queste nuove modifiche.

tu può usa Composer per evitare di dover prestare attenzione alle versioni e basta eseguire un aggiornamento e commettere tutte le modifiche. Ma perché hai un sacco di codice nel tuo repository che non hai bisogno di avere lì dentro?

La soluzione più accurata è quella di aggiungere fornitori / alla tua lista "Ignora" (E.g: .gitignore) e mantieni il tuo codice completamente fuori da lì. Quando si distribuisce il codice ai propri host, è sufficiente eseguire installazione di compositore o aggiornamento del compositore.

Se vuoi essere davvero intelligente, puoi automatizzare l'intero processo, quindi se hai hosting nel cloud, puoi configurare gli hook da eseguire installazione di compositore non appena viene premuto il tuo nuovo codice!


Sommario

Inizierete a vedere molto di più di Composer andando avanti, poiché vari framework PHP hanno iniziato a fornire vari livelli di integrazione; FuelPHP sarà costruito come pacchetti Composer, CodeIgniter supporterà l'autoloading e Symfony2 lo sta già utilizzando ampiamente.

Composer è un ottimo modo per aggiungere dipendenze ai tuoi progetti senza dover installare estensioni PECL o copiare e incollare un sacco di file. Questo modo di fare le cose è estremamente obsoleto e richiede troppo tempo per gli sviluppatori.