Cosa è Composer e Autoload

composer

Scrivendo un applicazione in PHP ci si accorce che molte delle funzionalità che utilizziamo vengono spesso riutilizzate in progetti differenti. L’autenticazione degli utenti, la gestione dei database oppure il routing delle pagine sono solo alcune delle funzionalità che ci portiamo dietro durante gli anni, anche attraverso l’uso di semplici copia/incolla.

L’utilizzo di librerie, come ad esempio Zend, Laravel o Symfony ci permette di integrare degli strumenti utili che facilitano il lavoro. Tuttavia, bisogna configurare ogni libreria per farla convivere con la nostra applicazione, che ne diventa diretammente dipendente. Tali librerie molto spesso dipendono da altre e la loro configurazione può creare non pochi problemi.

 

composer

Cosa è Composer

Composer è un gestore di dipendenze per PHP. Esso permette di gestire le dipendenze di un progetto, configurando le librerie necessarie, gestendone l’aggiornamento e il versionamento in maniera del tutto automatica. Inoltre Composer è in grado di gestire l’installazione e l’aggiornamento di librerie nidificate (librerie che hanno anch’esse delle dipendenze) in completa autonomia.

Cosa si può fare

Tra le funzionalità di Composer troviamo:

  1. L’autoloading per l’utilizzo di classi
  2. Gestione del namespacing per le librerie
  3. Semplificazione nell’utilizzo di librerie esterne

Come usarlo

  1. Installazione

    Installare Composer è relativamente semplice. Sul sito getcomposer.org è possibile scaricare il pacchetto di installazione per Windows oppure su Linux, Unix, OSX è possibile installarlo utilizzando curl

    Se invece preferite utilizzare Vagrant come macchina di support allora sul mio Gihub troverete gia tutto fatto. In particolare bisogna aggiungere solo l’installazione al file di provisioning.

    Una volta installato potete troverete il comando composer pronto all’uso:

  2. Creare il primo progetto con composer

    Prima di capire come utilizzare Composer è importante creare il file di configurazione (composer.json) cosi come abbiamo visto con Gulp. I due sistemi sono diversi, ma l’utilizzo di file json come file di configurazione è una caratteristica abbastanza comune tra i package manager. Potete procedere creando direttamente il file composer.json:

    oppure eseguendo il comando

    e seguendo le istruzioni a video. Il processo creerà il file composer.json basandosi sulle informazioni richieste.

  3. Usare l’autoloading invece della direttiva require

    Supponendo di avere un insieme di classi strutturati in questo modo:


    class diagramdove la class App fa uso di entrambe le classi ModuleInfo e FormatHelper.
    Il codice di App dovrebbe avere qualcosa del tipo:

    Quando implica che ogni volta avrete bisogno di utilizzare nuova classe all’interno di un’altra dovrete specificare cosa importare. In un’applicazione in cui le classi possono essere centinaia o migliaia questo processo è difficilmente utilizzabile.
    Composer risolve il problema attraverso la direttiva autoload.

  4. Usare autoload in composer

    la direttiva autoload permette di nascondere e di delegare l’inclusione di file attraverso un file, chiamato appunto autoload.php. Questo file viene fornito da Composer e descrive come e quando utilizzare il require all’interno dei nostri file php senza specificarlo direttamente.  Per utilizzarlo basta modificare il file composer.json nel seguento modo:

    la proprieta classmap contiene l’insieme di cartelle che composer controlla per poter costruire il file autoload.php, l’unico file che verra incluso all’interno del nostro progetto. Dopo aver modificato il file di configurazione di composer è necessario aggiornare il progetto, permettendo cosi a Composer di scansionare le cartelle incluse nel classmap, in questo caso app/classes, per farlo bisogna usare i comandi update e dumpautoload:

    Il primo comando scarica le dipendenze necessarie per il progetto, in questo caso solo autoload, il secondo invece esegue la scansione delle cartelle. Il risultato viene poi scritto nel file autoload_classmap.php che viene utilizzando da composer attraverso autoload.php per includere i file necessari.

  5. Includere autoload nel progetto

    Seguendo i passi precedenti, adesso è possibile sostituire le numerose righe che includono i require con una sola:

Anche se il processo descritto può sembrare macchinoso, Composer nasconde tutti questi aspetti, che invece si traducono in semplici passaggi che nascondono l’inclusione di file e dell’utilizzo delle dipendenze. Potete trovare il codice completo su Github come esempio ed un video su Youtube che ne illustra l’utilizzo.

Conclusione

Autoload è una della basi da cui partire che permette di semplicare il modo in cui le diverse parti e librerie di un applicazione comunicano tra loro. Nei prossimi articoli vedremo come utilizzare alcuni framework direttamente con Composer e capire come questi vengono inclusi e utilizzati all’intero di applicazioni un po’ più complesse.

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *