Debug console commands are one of the key parts of the Symfony debugging experience. In Symfony 5.3 we improved them with new features and new commands.
Debug Events by Event Dispatcher
The recent features introduced in the Security component have changed the
number of event dispatchers Symfony applications have by default. Each firewall
now defines its own dispatcher, whereas the debug:event-dispatcher
command
only displays the default dispatcher.
In Symfony 5.3 we added a new --dispatcher
option to display the events
associated to the given event dispatcher:
1 2 3 4 5 6 7 8 9 10 11 12 13
$ php bin/console debug:event-dispatcher --dispatcher=security.event_dispatcher.main
Registered Listeners of Event Dispatcher "security.event_dispatcher.main" Grouped by Event
==========================================================================================
"Symfony\Component\Security\Http\Event\LogoutEvent" event
---------------------------------------------------------
------- ------------------------------------------------------------------------------------------- ----------
Order Callable Priority
------- ------------------------------------------------------------------------------------------- ----------
#1 Symfony\Component\Security\Http\EventListener\CsrfTokenClearingLogoutListener::onLogout() 0
------- ------------------------------------------------------------------------------------------- ----------
Better Event Debugging
In Symfony 4.3 we started moving away from strings to name events in favor of
using fully-qualified class names. This makes your code simpler, but it
complicates the usage of the debug:event-dispatcher
command when you want to
filter by event.
1 2 3 4 5 6 7 8 9 10
# you need to type the entire event FQCN to debug it
$ php bin/console debug:event-dispatcher Symfony\\Component\\Mailer\\Event\\MessageEvent
------- --------------------------------------------------------------------------- ----------
Order Callable Priority
------- --------------------------------------------------------------------------- ----------
#1 Symfony\Component\Mailer\EventListener\MessageListener::onMessage() 0
#2 Symfony\Component\Mailer\EventListener\EnvelopeListener::onMessage() -255
#3 Symfony\Component\Mailer\EventListener\MessageLoggerListener::onMessage() -255
------- --------------------------------------------------------------------------- ----------
In Symfony 5.3 we improved this command to search for events using its full name or any part of it. That's way the following commands produce the same result as above:
1 2 3 4 5
$ php bin/console debug:event-dispatcher Mailer
$ php bin/console debug:event-dispatcher mailer
$ php bin/console debug:event-dispatcher MessageEvent
$ php bin/console debug:event-dispatcher messageEvent
$ php bin/console debug:event-dispatcher messageevent
New Command to Debug Firewalls
As part of the recent improvements related to security, in Symfony 5.3 we've added a new command to debug security firewalls.
Run the command without arguments to list the firewalls or pass a firewall name to debug it:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
$ php bin/console debug:firewall main
Firewall "main"
===============
----------------------- ---------------------------------------------------
Option Value
----------------------- ---------------------------------------------------
Name main
Context main
Lazy Yes
Stateless No
User Checker security.user_checker
Provider security.user.provider.concrete.app_user_provider
Entry Point App\Security\LoginFormAuthenticator
Access Denied URL
Access Denied Handler
----------------------- ---------------------------------------------------
User switching
--------------
----------- ---------------------------------------------------
Option Value
----------- ---------------------------------------------------
Parameter test
Provider security.user.provider.concrete.app_user_provider
User Role ROLE_SWITCH_POSSIBLE
----------- ---------------------------------------------------
Event listeners for firewall "main"
===================================
"Symfony\Component\Security\Http\Event\LoginSuccessEvent" event
---------------------------------------------------------------
// ...
Authenticators for firewall "main"
==================================
// ...
🤘🏻🤘🏻🤘🏻
If you are moving away from event names, can I suggest the docs change for creating events? They still suggest the name constant right now (assuming there’s not a pull waiting)
@Richard you are so right! The entire docs about events need a revamp. We're intend to work on that "soon" but sadly I can't give you an estimate.
There was also a new debug command on 5.2 to debug your validators.