Symfony Flex è una modalità con cui Symfony permette di aggiungere funzionalità al nostro progetto. È basato sul concetto di ricette, ovvero un set di istruzioni automatizzate che consentono di includere librerie di terze parti all'interno dell'applicazione.
Flex utilizza un suo file symfony.lock
per memorizzare le versioni delle librerie, ma lo sviluppatore continuerà ad utilizzare Composer per aggiunger le librerie, nella maniera in cui è sempre stato abituato.
L'applicazione che abbiamo appena installato contiene già al suo interno una serie di ricette che ci saranno utili durante lo sviluppo. La quasi totalità delle dipendenze che troviamo all'interno del nostro composer.json
sono delle ricette che possiamo reperire sul repository ufficiale: Symfony Recipes Server.
Nel repository sono presenti due tipi di ricette: quelle ufficiali e quelle provenienti dalla community. Quelle ufficiali offrono una garanzia di funzionamento maggiore ma in quelle della community spiccano comunque nomi noti nell'ambiente PHP.
Aggiungere una libreria con Flex
La maggior parte del lavoro è stato già fatto da Symfony durante l'installazione, quindi non abbiamo necessità di installare ricette in questa fase. Se avessimo iniziato completamente da zero un progetto Symfony, non passando quindi il parametro --full
al comando symfony
, in questa fase avremmo dovuto aggiungere manualmente tutte le dipendenze di cui avevamo bisogno.
Una delle ricette più importanti che si può aggiungere nel progetto è, ad esempio, symfony/orm-pack
che installa Doctrine per la gestione del database.
Per vedere in azione Symfony Flex installiamo la ricetta friendsofphp/php-cs-fixer
che ci consente di integrare PHP-CS-Fixer nel nostro progetto.
PHP-CS-Fixer è un tool che effettua un'analisi statica del codice e ci suggerisce (o effettua direttamente) modifiche al codice per rispettare il coding standard definito dal progetto.
All'interno del container app
lanciamo il comando:
$ composer require --dev friendsofphp/php-cs-fixer
L'output del comando è, inizialmente, quello a cui siamo già abituati: Composer effettuerà il download della libreria e delle sue dipendenze. Una volta completato il download, però, entra in gioco Flex configurando per noi la libreria in maniera che sia già pronta all'uso:
Symfony operations: 1 recipe (968d7830fb6e2a1550aa7b6a743b97fb)
- Configuring friendsofphp/php-cs-fixer (>=2.2): From github.com/symfony/recipes:master
Executing script cache:clear [OK]
Executing script assets:install public [OK]
Some files may have been created or updated to configure your new packages.
Please review, edit and commit them: these files are yours.
Un git diff
ci mostrerà come alcuni file sono cambiati ed il file .php_cs.dist
di configurazione di PHP-CS-Fixer è stato aggiunto al progetto.
Proviamo il comando per essere sicuri che funzioni correttamente. Se lo lanciassimo in questo momento non effettuerebbe alcuna modifica al sorgente poiché non abbiamo ancora scritto del codice.
Possiamo, però, modificare il file src/Kernel.php
affinché PHP-CS-Fixer possa sistemarlo. È sufficiente inserire sulla stessa riga della dichiarazione di un metodo la sua parentesi graffa e poi lanciare il comando di seguito per fixare il problema.
$ ./vendor/bin/php-cs-fixer fix src/
Loaded config default from "/var/www/kvak/.php_cs.dist".
Paths from configuration file have been overridden by paths provided as command arguments.
1) src/Kernel.php
Fixed all files in 0.102 seconds, 12.000 MB memory used
Ora che siamo certi che il fixer funziona correttamente possiamo effettuare una commit.
Il codice della lezione è disponibile al tag symfony_flex
.
Risolvere il warning: the zip extension and unzip command are both missing
Probabilmente durante l'installazione della libreria ci saremo accorti di tale warning. Per fixarlo è necessario aggiungere l'estensione zip
al Dockerfile e ricreare il container:
$ docker-compose up -d --build