Che cos’è Symfony Flex?
Symfony Flex è un plugin Composer che possiamo utilizzare per gestire le dipendenze nel nostro progetto e per automatizzare molte delle attività più comuni che si eseguono durante lo sviluppo di un’applicazione Symfony.
Flex è presente nell’installazione base avviata tramite Symfony installer. Per aggiungerlo manualmente è possibile farlo tramite il comando:
composer require symfony/flex
Dopo l’installazione, Flex inizierà automaticamente a gestire le Recipe.
Cosa sono le Recipe in Symfony?
Symfony Flex è basato sul concetto di Recipe (letteralmente ricette), ovvero un insieme di istruzioni automatizzate che vengono eseguite quando viene aggiunto, aggiornato o rimosso un pacchetto ad una applicazione Symfony. Le recipe possono effettuare le seguenti operazioni sul progetto dove vengono lanciate:
- Creare e modificare file e cartelle
- Aggiungere nuove configurazioni
- Aggiungere variabili d’ambiente
Le recipe sono sono reperibili al link recipe ufficiali Symfony. Oltre a quelle ufficiali, sviluppate dal team di Symfony, sono disponibili anche quelle della community (e, quindi, sviluppate da terzi), al link recipe della community Symfony.
Struttura di una Recipe in Symfony
Ogni recipe è strutturata seguendo un insieme di cartelle e file ben definiti:
nome-recipe/ ├── config/ │ └── packages/ │ └── nome_pacchetto.yaml ├── src/ │ └── ... ├── templates/ │ └── ... ├── public/ │ └── ... ├── manifest.json └── README
- config/: contiene le configurazioni specifiche del pacchetto. Le configurazioni sono di solito definite in file YAML all’interno della sottocartella packages/.
- src/: può contenere file con codice sorgente da aggiungere al progetto durante l’installazione del pacchetto.
- templates/: contiene template Twig che possono essere utilizzati o estesi all’interno del progetto.
- public/: può contenere asset pubblici, come CSS, JavaScript e immagini, che vengono utilizzati dal pacchetto.
- manifest.json: questo è il file centrale della recipe. All’interno di esso sono definite una serie di istruzioni che Flex seguirà durante l’installazione del pacchetto. Ad esempio:
- copiare file e cartelle dalla recipe al progetto.
- eseguire script durante l’installazione.
- aggiungere variabili d’ambiente al file .env del progetto.
- aggiungere nuove configurazioni ai file già presenti nel progetto o aggiungere nuovi file di configurazione
- README: contiene istruzioni e informazioni sul pacchetto, fornendo una guida su come utilizzare il pacchetto una volta installato.
Utilizzo di Symfony Flex
Symfony Flex utilizza il file symfony.lock presente all’interno della root del progetto per gestire le versioni delle librerie ma questo passaggio è trasparente allo sviluppatore php che continuerà ad utilizzare Composer per l’aggiunta di nuove librerie.
Infatti, Flex è controllato da tre semplici comandi.
- require: per installare un nuovo pacchetto è sufficiente usare il comando composer require seguito dal nome del pacchetto:
composer require nome/pacchetto
- update: per aggiornare una dipendenza alla sua ultima versione usare il comando composer update seguito dal nome del pacchetto:
composer update nome/pacchetto
- remove: infine, per rimuovere un pacchetto, usare il comando composer remove seguito dal nome del pacchetto:
composer remove nome/pacchetto
Come installare Twig con Symfony Flex
Grazie all’ausilio di Symfony Flex è possibile installare e configurare Twig, il template engine per la creazione delle interfacce web, con un solo comando:
composer require twig
Il package twig per il quale è stata richiesta l’installazione, non fa riferimento al package Composer ma è un alias di Flex che punta a symfony/twig-bundle. Flex si occuperà, per prima cosa, di risolvere gli alias per Composer. Successivamente, installerà la recipe del pacchetto richiesto.
In particolare, la recipe di Twig, si occupa di:
- abilitare automaticamente la nuova funzionalità in config/bundles.php
- aggiungere in config/packages il file twig.yaml contenente la configurazione di default di Twig
- aggiungere in config/packages/test il file twig.yaml contenente alcune opzioni di configurazione da utilizzare durante i test
- creare la cartella templates ed all’interno il file di layout base.html.twig
Il codice sorgente della recipe è disponibile sul repository Github di Symfony relativo alle recipe ufficiali
La struttura di cartelle, per twig-bundle è la seguente:
Il file manifest.json contiene:
{ "bundles": { "Symfony\\Bundle\\TwigBundle\\TwigBundle": ["all"] }, "copy-from-recipe": { "config/": "%CONFIG_DIR%/", "templates/": "templates/" }, "conflict": { "symfony/framework-bundle": "<5.3" } }
Il nodo bundles indica quali bundles attivare all’interno in Symfony e, quindi, all’interno del file config/bundles.php.
Il nodo copy-from-recipe indica quali cartelle dovranno essere copiate dalla recipe e dove all’interno del progetto. In questo caso specifico, la cartella config verrà copiata in %CONFIG_DIR%/ ovvero la cartella config del progetto e templates in templates andando a creare una nuova cartella nella root del progetto.