La console di Symfony è un tool che abbiamo a disposizione sia durante lo sviluppo di un progetto, sia durante il suo ciclo di vita in produzione. Attraverso la console, infatti, è possibile effettuare diverse operazioni già a disposizione ma soprattutto possiamo creare degli script da far girare in caso di necessità o come cron per le operazioni a cadenza periodica.
Vediamo innanzitutto quali sono i comandi messi a disposizione da Symfony e/o dalle librerie di terze parti già incluse nel nostro progetto. Per iniziare lanciamo il comando ./bin/console
dal nostro container.
www-data@625b509dfd7c:~/kvak$ ./bin/console
Symfony 5.0.0 (env: dev, debug: true)
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-e, --env=ENV The Environment name. [default: "dev"]
--no-debug Switches off debug mode.
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands:
about Displays information about the current project
help Displays help for a command
list Lists commands
assets
assets:install Installs bundles web assets under a public directory
cache
cache:clear Clears the cache
L’output appena visto è, in realtà, solo un estratto dei comandi disponibili. Lo scopo della lezione non è quello di descrivere tutti i comandi ma solo di introdurre la console. Non li analizzeremo tutti in questa fase, ma ne approfondiremo alcuni che ci aiuteranno durante lo sviluppo. I restanti li introdurremo man mano che ne avremo bisogno.
La sintassi
Per richiamare un comando dalla console è sufficiente appendere al file binario il nome del comando e, se necessario, l'ambiente in cui farlo girare.
./bin/console cache:clear --env=dev
Nell’esempio appena visto abbiamo lanciato il comando di pulizia cache per l’ambiente di sviluppo. Nel caso in cui l’opzione env
venga omessa, l’applicazione prenderà come di default il valore contenuto all’interno della variabile d’ambiente APP_ENV
contenuta nel file .env
.
Se non ci sono casi di conflitti, la console è sufficientemente intelligente da accettare anche una porzione di comando anziché il nome completo. Il comando precedente, quindi, può essere richiamato anche nel modo seguente:
./bin/console c:c --env=dev
Comandi utili durante lo sviluppo
Oltre al comando con cui svuotare la cache essenziale sia durante lo sviluppo che, ad esempio, ogni volta che effettueremo un deploy in produzione, ci sono altri comandi che possono aiutarci mentre lavoriamo alla nostra applicazione. Vediamone alcuni.
debug
debug:autowiring Lists classes/interfaces you can use for autowiring
debug:config Dumps the current configuration for an extension
debug:container Displays current services for an application
debug:event-dispatcher Displays configured listeners for an application
debug:form Displays form type information
debug:router Displays current routes for an application
debug:translation Displays translation messages information
debug:twig Shows a list of twig functions, filters, globals and tests
Tutto il namespace debug
contiene utilissime informazioni quando dobbiamo capire ad esempio perché una rotta non funziona o quali sono i servizi registrati nel container.
Servizi registrati nel container
Per consultare i dati relativi ai servizi registrati nel container possiamo lanciare il comando ./bin/console debug:container
. Questa funzionalità ci è utile, ad esempio, per individuare la classe utilizzata da un determinato servizio.
www-data@625b509dfd7c:~/kvak$ ./bin/console debug:container
Symfony Container Services
==========================
------------------------------------------------- ----------------------------------------------------
Service ID Class name
------------------------------------------------- ----------------------------------------------------
Doctrine\Common\Annotations\Reader alias for "annotations.cached_reader"
Doctrine\Common\Persistence\ManagerRegistry alias for "doctrine"
Doctrine\DBAL\Connection alias for "doctrine.dbal.default_connection"
Doctrine\DBAL\Driver\Connection alias for "doctrine.dbal.default_connection"
Doctrine\ORM\EntityManagerInterface alias for "doctrine.orm.default_entity_manager"
EasyCorp\EasyLog\EasyLogHandler EasyCorp\EasyLog\EasyLogHandler
Match di una rotta
Se invece volessimo sapere, data una rotta, quale action viene utilizzata, possiamo utilizzare il comando seguente:
www-data@625b509dfd7c:~/kvak$ ./bin/console router:match /_wdt/1
[OK] Route "_wdt" matches
+--------------+--------------------------------------------------------------+
| Property | Value |
+--------------+--------------------------------------------------------------+
| Route Name | _wdt |
| Path | /_wdt/{token} |
| Path Regex | #^/_wdt/(?P<token>[^/]++)$#sDu |
| Host | ANY |
| Host Regex | |
| Scheme | ANY |
| Method | ANY |
| Requirements | NO CUSTOM |
| Class | Symfony\Component\Routing\Route |
| Defaults | _controller: web_profiler.controller.profiler::toolbarAction |
| Options | compiler_class: Symfony\Component\Routing\RouteCompiler |
| | utf8: true |
+--------------+--------------------------------------------------------------+
Per adesso ci fermeremo a questi comandi, ne vedremo però altri durante la guida che ci saranno di grande aiuto e, soprattutto, utilizzeremo la console per crearne di nostri.