devdev / in the loop
PHP PHP

Guida a Composer
Scaricare installare pacchetti con Composer

Dopo aver capito come installare Composer nel capitolo precedente, possiamo finalmente utilizzarlo per aggiungere librerie o pacchetti esterni al nostro progetto. A fini didattici, in questa guida installeremo PHPMailer, la famosa libreria open source che ci permette di inviare email in PHP e l’SDK di Facebook.

Il file composer.json

Iniziamo creando nella cartella del nostro progetto un file composer.json. In questo file scriveremo quali librerie vogliamo Composer scarichi automaticamente per noi. Per farlo, dobbiamo specificare un valore di require in formato json.

{
    "require": {
        "phpmailer/phpmailer": "5.2.2"
    }
}

require contiene uno o più oggetti che fanno riferimento alla libreria (es. phpmailer/phpmailer) e alla versione desiderata (es. 5.2.2).

Composer userà queste informazioni per cercare l’esatta versione nel suo repository, chiamato Packagist, e lo scaricherà nella cartella vendor. È naturalmente possibile indicare più librerie:

{
    "require": {
        "phpmailer/phpmailer": "5.2.2",
        "facebook/graph-sdk": "master"
    }
}

Nei prossimi capitoli vedremo come gestire le versioni in Composer. Per il momento limitiamoci al fatto che Composer scaricherà la versione 5.2.2 di PHPMailer e l’ultima versione del Graph SDK di Facebook.

I nomi delle librerie, come avrete notato, sono composti da un binomio fornitore/progetto, che spesso sono identici come nel primo caso in esempio, phpmailer/phpmailer e diversi fra loro per il secondo, facebook/graph-sdk. Nella maggioranza dei casi sulla pagina del progetto Github o Packagist trovate il nome esatto da utilizzare nel vostro composer.json.

Installiamo le librerie

A questo punto lanciamo il comando install di Composer. Per questi esempi, daremo per scontato che abbiate una installazione Locale, come abbiamo visto nel capitolo precedente su come installare Composer. Eseguiamo il comando

php composer.phar install

A questo punto, se è la prima esecuzione, Composer leggerà il file composer.json, scaricherà i file nella cartella vendor e creerà un nuovo file composer.lock. Questo file serve a ricordare quali versioni delle librerie che abbiamo scaricato in questa operazione appena eseguita.

Se invece non è una esecuzione successiva o state lavorando su un progetto già avviato, con un composer.json esistente e con delle librerie già scaricate, Composer troverà un file composer.lock generato in precedenza e scaricherà le librerie alla versione presente appunto in composer.lock. Questo meccanismo è utilissimo quando, durante lo sviluppo del nostro progetto, sono state rilasciate nuove versioni delle librerie esterne, che magari non funzionano o non sono più compatibili con il nostro progetto.

Quindi, il file composer.lock è importante quanto il file composer.json: insieme sono la vera struttura che dice quali librerie e in quale data versione il nostro progetto si basa. È per questo che se usate Git, dovete includere questi due file nei vostri commit, mentre potete escludere tranquillamente la cartella vendor, dato che è possibile generarla nuovamente all’infinito.

Includiamo i pacchetti (autoload)

Abbiamo configurato il nostro composer.json e le librerie sono state scaricate nella cartella vendor. Anche il nostro file composer.lock è pronto per futuri sviluppi. Non ci resta che usare le librerie nel nostro progetto PHP. Composer ha generato automaticamente un file autoload.php presente nella cartella vendor, che possiamo semplicemente includere nei nostri file PHP. Questo file include automaticamente tutti i pacchetti che abbiamo scelto di scaricare in composer.json.

require __DIR__ . '/vendor/autoload.php';

//La libreria PHPMailer è automaticamente inclusa, possiamo utilizzarla direttamente
$mail = new PHPMailer;
$mail->setFrom('info@devdev.it');
$mail->addAddress('luca.murante@gmail.com');  
$mail->Subject = 'Email da devdev.';
$mail->Body    = 'Questo è un messaggio di prova!';
$mail->send();

Fatto. Incluendo il file vendor/autoload.php nei nostri progetti abbiamo automaticamente a disposizione tutte le funzionalità offerte dai pacchetti. Nell’esempio inviamo una mail di prova da un’istanza dell’oggetto PHPMailer.

Una funzione che può tornarci utile, è quella di aggiornare i pacchetti in Composer, vediamola nel prossimo capitolo.

Capitolo successivo → Aggiornare i pacchetti con Composer
if (weekend) {
    relax();
}
la nostra newsletter, ogni tanto.