nowo_dashboard_menu. It appears in the debug toolbar and profiler only in the dev environment — there is no overhead in production.
What the panel shows
Menus tab
For each menu loaded on the current request, the panel shows:- Code — the resolved menu code
- Context sets — the context sets passed to the loader (if any)
- Resolved context — the actual context matched from the database
- Root item count — number of root-level items returned
- Item summary — a tree of items with their labels, types, icons, and child counts
- Query count — number of database queries attributed to that menu load
Configuration tab
The panel also exposes the active bundle configuration for quick reference:| Section | What you see |
|---|---|
| Connection | Doctrine connection name and table prefix |
| Cache | TTL and cache pool name |
| Locales | Configured locales and default locale |
| Icon map | icon_library_prefix_map entries |
| Permission checkers | Registered checker service IDs and their labels |
Using the panel for debugging
Open the profiler
Make a request in your browser. Click the Symfony debug toolbar at the bottom of the page, then navigate to the Dashboard menus section.
Identify loaded menus
Check which menus were resolved for the request. If a menu you expected is missing, the code or context sets may not match any stored menu.
Check query counts
Review the query count per menu. High counts can indicate a missing cache pool or a very large menu tree loaded without caching.
How query counting works
The data collector inspects the Symfonydb profiler collector after the request completes (lateCollect). It scans collected SQL queries and counts those that reference tables starting with dashboard_menu. This count is an approximation based on SQL string matching — it does not wrap or intercept the Doctrine DBAL connection directly.
Query counting relies on the Doctrine profiler being active. It is only available when
symfony/doctrine-bridge and profiler support are present in the dev environment.Availability
The data collector is registered only when the Symfony Profiler service is present. Inprod it is never instantiated, so there is zero performance cost.