Skip to main content
Nowo Dashboard Menu Bundle is a Symfony bundle that lets you manage application menus entirely through a database-backed dashboard, without hardcoding navigation in templates or config files. Menus support multiple locales, hierarchical tree structures, per-item permissions, and context-based variants — all exposed through both a Twig API and a JSON REST endpoint.

Key features

Tree structure

Items with parent/children relationships, ordered by position. Supports unlimited depth, collapsible nested lists, link items, and section headers.

i18n support

Labels stored as JSON translations per locale. Pass a locale via Twig or the _locale query param on the API — no extra translation files needed.

Context resolution

The same menu code can have multiple variants distinguished by a JSON context (e.g. partnerId, operatorId). Pass an ordered list of context sets; the first match wins.

Permissions

Implement MenuPermissionCheckerInterface and tag it as a service to filter items per user or context. No-checker menus default to allow-all.

Twig rendering

Three Twig functions — dashboard_menu_tree(), dashboard_menu_config(), and dashboard_menu_href() — plus a ready-made menu.html.twig template you can override.

JSON API

GET /api/menu/{code} returns the resolved, permission-filtered tree as JSON for SPA or headless consumption.

Dashboard CRUD

Full admin UI at /admin/menus: create, edit, copy, and delete menus and items. Export and import menus as JSON for backups and environment migrations.

Performance

Two SQL queries per menu. Optional PSR-6 cache with configurable TTL and pool. Tree built in PHP — no recursive SQL.

Compatibility

RequirementVersion
PHP>= 8.2, < 8.6
Symfony6.4 (LTS), 7.x, or 8.x
Doctrine ORM^2.13 || ^3.0
Symfony 8.0 requires PHP >= 8.4. With PHP 8.2 or 8.3, Composer resolves to Symfony 6.4 or 7.x. With PHP 8.4+ you can target any supported Symfony version.
No Gedmo, StofDoctrineExtensionsBundle, or other external ORM extensions are required. The bundle manages its own tree ordering in PHP.

Next steps

Installation

Add the bundle to your Symfony project, register routes, and create the database schema.

Quickstart

Go from a fresh install to a working rendered menu in minutes.