This page documents breaking changes and upgrade notes between versions, ordered from newest to oldest.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/nowo-tech/DashboardMenuBundle/llms.txt
Use this file to discover all available pages before exploring further.
From 0.3.24 to 0.3.25
No breaking changes.- Dashboard import modal: import submit now handles redirects reliably after successful
POST+302responses, so the modal no longer appears stuck. - Dashboard item list: rows are rendered in deterministic tree order using item
position(sibling fallback byid), and the table displays each item position under its parent label. - Performance: reduced N+1 risk in dashboard copy/export/edit flows (copy uses a flat preloaded item list, descendant lookup uses BFS, import uses an in-memory has-children map, export-all loads all items in one query).
From 0.3.22 to 0.3.23
No breaking changes.- LiveComponent: fixes item modal submit crash; per-locale
label_{locale}fields hydrate reliably. - Dashboard UI: item modal icon field uses a plain text input so the stored icon string is always prefilled during LiveComponent editing.
- Demos: asset build commands run inside the demo Docker container (
make assets/make ts-assets) for consistentpnpmbehaviour.
From 0.3.23 to 0.3.24
No breaking changes.- Dashboard UI: menu item labels are rendered using
MenuItem::getLabelForLocale(). - Dashboard item forms: “Add child” modal shows only
label+ per-locale translations (type fixed to Link) and hides icon/position fields. - Dashboard item forms: icon identity editing uses a normal Symfony form (not LiveComponent) to ensure the icon-selector widget refreshes correctly.
- Dashboard item forms: label validation accepts either a non-empty base label or at least one non-empty translation; empty
positionvalues are normalized to0.
From 0.3.21 to 0.3.22
No breaking changes.- Config: new optional
dashboard.icon_sizeto control the CSS size of rendered menu item icons. - Templates/overrides:
item.labelis already resolved for the current locale byMenuTreeLoader; if you overridemenu.html.twig, prefer renderingitem.labelas-is (avoid an extra|trans(...)).
From 0.3.20 to 0.3.21
No breaking changes.- Config/UI: new
dashboard.item_span_activeoption to optionally render an extra wrapper<span>around non-section items inmenu.html.twig. - Config: wrapper class is taken from the first non-empty value in
dashboard.css_class_options.span.
From 0.3.19 to 0.3.20
No breaking changes.- Config: new
dashboard.id_optionsto drive the dashboard menu form fieldulId(dropdown vs plain text). - Menu entity: added nullable
Menu.ulIdmapped to DB columnul_id. When set, the rendered menu root<ul>getsid="...".
From 0.3.18 to 0.3.19
No breaking changes.From 0.3.17 to 0.3.18
No breaking changes.- Dashboard UI spacing: default CSS class options were updated (
gap-2→gap-1). If you depend on exact default class strings, re-check your expectations.
From 0.3.16 to 0.3.17
No breaking changes.- CSRF: dashboard item forms explicitly set
csrf_token_idtosubmitto keep CSRF consistent across Symfony versions. - Dashboard templates: autocomplete form theme is applied only when
Symfony\UX\Autocompleteis available; overrides of_item_form_partial.html.twig,item_form.html.twigorcomponents/ItemFormLiveComponent.html.twigshould keep the same conditional if you rely on autocomplete. - Demo Symfony 7: sessions + CSRF and
framework.property_infoare enabled to avoid config option errors on older Symfony versions.
From 0.3.15 to 0.3.16
No breaking changes.- Config: optional
dashboard.permission_key_choices(array of strings) turns the item form permission key field into a select with autocomplete. - Add child: parent ID is sent in the form action URL; the “Add child” button is disabled for section and divider items.
- MenuItem:
itemTypeis now nullable (DB and entity); getter/setter handle null. No change needed unless you type-hint or reflect on the property. - Permission checkers: if you add a custom checker, tag it with
nowo_dashboard_menu.permission_checkerand optionallabel.
From 0.3.14 to 0.3.15
No breaking changes.- Dashboard: menu and item forms are split into definition (pencil icon) and configuration (gear icon). New menu/item shows only definition; after creation edit configuration via the gear button.
- Redirect: after any successful dashboard action the app redirects to the same-origin referer URL.
- Import: the import form can be opened in a modal (AJAX) from the dashboard index.
- MenuItem:
labelproperty is now nullable (for divider items). The getter still returns a string (empty string when null). Update type hints if you extend or reflect on the entity.
From 0.3.13 to 0.3.14
No breaking changes.From 0.3.12 to 0.3.13
No breaking changes.- New menu option
nestedCollapsibleSections: when disabled, section-type items do not collapse their children. - Export/import now includes
classSectionLabelandnestedCollapsibleSections. - New required dependency:
symfony/mime(for the import form file validator). ImportMenuTypeconstraints updated for Symfony 7/8 (named arguments).
From 0.3.11 to 0.3.12
No breaking changes.- Demos now rely on Doctrine Migrations (instead of schema update) and ship a single “create tables” migration matching the current schema.
- The migration generator command supports
--updateto create ALTER migrations for existing installations.
From 0.3.10 to 0.3.11
No breaking changes.- The dashboard menu list shows the number of items per menu.
- The dashboard menu items table is more responsive (actions moved left, up/down stacked).
- New required dependency:
symfony/ux-autocomplete.
From 0.3.9 to 0.3.10
No breaking changes. Unit tests were updated after replacingRegisterTwigNamespacePass with TwigPathsPass.
From 0.3.8 to 0.3.9
No breaking changes. The bundle now registers its Twig views viaTwigPathsPass. Application overrides in templates/bundles/NowoDashboardMenuBundle/ continue to take precedence.
From 0.3.7 to 0.3.8
No breaking changes. Dashboard export links now open in a new browser tab.From 0.3.6 to 0.3.7
No breaking changes. New optional security options:dashboard.required_role— when set (e.g.ROLE_ADMIN), all dashboard routes require this role. Requires Symfony SecurityBundle.dashboard.import_export_rate_limit— optional rate limit for import and export (e.g.{ limit: 10, interval: 60 }). Returns HTTP 429 when exceeded.dashboard.import_max_bytes— max size in bytes for JSON import uploads (default 2 MiB).
From 0.3.5 to 0.3.6
No breaking changes. The bundle registers the Twig namespace@NowoDashboardMenuBundle so that templates in templates/bundles/NowoDashboardMenuBundle/ take precedence.
From 0.3.4 to 0.3.5
From 0.3.3 to 0.3.4
No breaking changes.- Dashboard export/import: export/import menus as JSON (
config + item tree, no internal IDs). - Config:
dashboard.layout_templateto choose the Twig layout dashboard views extend (default unchanged). - Dashboard content block is now
content(wasdashboard_body). If you override the bundle’s dashboard layout template, ensure it defines{% block content %}. - MenuUrlResolver: fills missing route path params from the current request and adds a flash message on URL generation failure.
From 0.3.2 to 0.3.3
No breaking changes. Permission checkers are now auto-tagged: any service implementingMenuPermissionCheckerInterface is included in the dashboard dropdown automatically. You can remove the manual tag from your checker service. Optionally set the label via DASHBOARD_LABEL constant or #[PermissionCheckerLabel('...')] attribute.
From 0.3.1 to 0.3.2
No breaking changes.permission_checker_choices now accepts a list of service IDs (to order/filter the dropdown) as well as the existing map (service id => label).
From 0.3.0 to 0.3.1
No breaking changes. New optional config:permission_checker_choices (service id => label map) to customize the “Permission checker” dropdown.
From 0.2.x to 0.3.0
- Restored support: PHP 8.2 and 8.3, and Symfony 6.4 and 7, are supported again. You can downgrade from PHP 8.4 to 8.2 or use Symfony 6.4/7 if needed.
- Optional dependency:
nowo-tech/icon-selector-bundleis no longer required. If you had it installed, it continues to work. If you remove it, the icon field becomes a plain text input.
From 0.1.x to 0.3.0
- New: Symfony 6.4 (LTS) is supported; requirements are PHP >= 8.2 < 8.6, Symfony
^6.4 || ^7.0 || ^8.0. - Optional: For the icon selector widget in the dashboard item form you can install
nowo-tech/icon-selector-bundle(suggested; requires Symfony^7.0 || ^8.0). Without it, the icon field is a text input.
From 0.0.1 to 0.1.0
No breaking changes. New features: configurable cache for menu tree,icon_library_prefix_map, two-query SQL path in MenuRepository::findMenuAndItemsRaw(), Web Profiler panel “Dashboard menus”, and Doctrine table quoting via Platform::quoteSingleIdentifier(). Configure cache.ttl / cache.pool and icon_library_prefix_map in your config if needed.
0.0.1 (first release)
No upgrade path; this is the first stable release.- Requirements: PHP >= 8.2 < 8.6, Symfony
^6.4 || ^7.0 || ^8.0, Doctrine ORM^2.13 || ^3.0. No Gedmo or Stof extensions required.