PHPackages                             dahovitech/menu-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. dahovitech/menu-bundle

ActiveSymfony-bundle[Framework](/categories/framework)

dahovitech/menu-bundle
======================

Symfony Menu Bundle by Dahovitech

v1.0.0(9mo ago)00MITPHPPHP &gt;=8.1

Since Jul 31Pushed 9mo agoCompare

[ Source](https://github.com/dahovitech/menu-bundle)[ Packagist](https://packagist.org/packages/dahovitech/menu-bundle)[ RSS](/packages/dahovitech-menu-bundle/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (4)Versions (2)Used By (0)

DahovitechMenuBundle
====================

[](#dahovitechmenubundle)

Ce bundle Symfony fournit un moyen simple et flexible de gérer et d'afficher des menus dans vos applications Symfony.

Nouveautés et Améliorations
---------------------------

[](#nouveautés-et-améliorations)

Cette version apporte des améliorations significatives :

- **Attributs HTML Dynamiques :** Personnalisez les attributs HTML (`class`, `id`, `data-*`) de chaque élément de menu.
- **Paramètres de Route :** Générez des URLs complexes en passant des paramètres aux routes Symfony.
- **Templates Multiples :** Définissez un template Twig spécifique pour chaque menu.
- **Voters de Visibilité :** Contrôlez dynamiquement la visibilité des éléments de menu (e.g., basé sur les rôles utilisateur).
- **Système d'Événements :** Modifiez les menus de manière programmatique après leur construction via des événements.
- **Mécanisme de Cache :** Améliorez les performances en mettant en cache les menus générés.
- **Gestion de l'État Actif :** Les éléments de menu actifs reçoivent automatiquement une classe `active`.
- **Accessibilité (ARIA) :** Les menus sont générés avec des attributs ARIA pour une meilleure accessibilité.

Installation
------------

[](#installation)

1. Ajoutez le bundle à votre projet Symfony via Composer :

    ```
    composer config repositories.dahovitech-menu-bundle '{"type": "path", "url": "./dahovitech/menu-bundle"}'
    composer require dahovitech/menu-bundle:dev-main
    ```
2. Activez le bundle dans votre `config/bundles.php` :

    ```
    return [
        // ...
        Dahovitech\MenuBundle\DahovitechMenuBundle::class => ["all" => true],
    ];
    ```

Configuration
-------------

[](#configuration)

Configurez vos menus dans `config/packages/dahovitech_menu.yaml` :

```
dahovitech_menu:
    menus:
        main_menu:
            template: '@DahovitechMenu/menu.html.twig' # Optionnel, utilise le template par défaut si non spécifié
            items:
                - label: 'Accueil'
                  route: 'app_homepage'
                - label: 'À propos'
                  url: '/about'
                - label: 'Services'
                  children:
                      - label: 'Service 1'
                        route: 'app_service1'
                      - label: 'Service 2'
                        url: '/services/service2'
                - label: 'Contact'
                  route: 'app_contact'
                  attributes:
                      class: 'contact-link'
        admin_menu:
            template: '@DahovitechMenu/admin_menu.html.twig'
            items:
                - label: 'Dashboard'
                  route: 'admin_dashboard'
                - label: 'Utilisateurs'
                  route: 'admin_users_list'
                  route_params:
                      page: 1
                  attributes:
                      data-toggle: 'tooltip'
                      title: 'Gérer les utilisateurs'
```

Utilisation dans Twig
---------------------

[](#utilisation-dans-twig)

Pour afficher un menu dans vos templates Twig, utilisez la fonction `dahovitech_menu` :

```
{{ dahovitech_menu('main_menu') }}
```

Vous pouvez également passer des options supplémentaires au template (par exemple, pour ajouter une classe à la balise `` racine) :

```
{{ dahovitech_menu('main_menu', {'ul_class': 'navbar-nav'}) }}
```

Utilisation des Voters (Visibilité)
-----------------------------------

[](#utilisation-des-voters-visibilité)

Pour contrôler la visibilité d'un élément de menu, vous pouvez utiliser le système de voters de Symfony. Par défaut, tous les éléments sont visibles. Vous pouvez créer vos propres voters en implémentant `Symfony\Component\Security\Core\Authorization\Voter\VoterInterface` et en les taguant avec `security.voter`.

**Exemple de Voter simple (pour les administrateurs) :**

```
// src/Voter/AdminMenuItemVoter.php
namespace App\Voter;

use Dahovitech\MenuBundle\Model\MenuItem;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;

class AdminMenuItemVoter extends Voter
{
    protected function supports(string $attribute, mixed $subject): bool
    {
        return $attribute === 'view' && $subject instanceof MenuItem && $subject->getLabel() === 'Dashboard Admin';
    }

    protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool
    {
        // Seuls les utilisateurs avec le rôle ROLE_ADMIN peuvent voir cet élément
        return $token->getUser() && in_array('ROLE_ADMIN', $token->getUser()->getRoles());
    }
}
```

Ensuite, dans votre configuration de menu, vous pouvez définir la visibilité :

```
dahovitech_menu:
    menus:
        admin_menu:
            items:
                - label: 'Dashboard Admin'
                  route: 'admin_dashboard'
                  # Cet élément sera filtré par AdminMenuItemVoter
```

Utilisation des Événements (Modification)
-----------------------------------------

[](#utilisation-des-événements-modification)

Vous pouvez écouter l'événement `dahovitech_menu.build` pour modifier les menus après leur construction initiale. Créez un service qui implémente `Symfony\Component\EventDispatcher\EventSubscriberInterface`.

**Exemple d'Event Subscriber :**

```
// src/EventSubscriber/MenuSubscriber.php
namespace App\EventSubscriber;

use Dahovitech\MenuBundle\Event\MenuBuildEvent;
use Dahovitech\MenuBundle\Model\MenuItem;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class MenuSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [
            MenuBuildEvent::NAME => 'onMenuBuild',
        ];
    }

    public function onMenuBuild(MenuBuildEvent $event):
    {
        if ($event->getMenuName() === 'main_menu') {
            $menuItems = $event->getMenuItems();
            $menuItems[] = new MenuItem('Nouveau Lien Ajouté', '/new-link');
            $event->setMenuItems($menuItems);
        }
    }
}
```

N'oubliez pas de déclarer votre service dans `services.yaml` :

```
# config/services.yaml
services:
    App\EventSubscriber\MenuSubscriber:
        tags: [kernel.event_subscriber]
```

Tests
-----

[](#tests)

Des tests unitaires et fonctionnels ont été ajoutés pour couvrir les nouvelles fonctionnalités et garantir la stabilité du bundle.

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance56

Moderate activity, may be stable

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

292d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9f4dae75390fa4a04152bcca61a691fe658a18c50e56005817d225e443f1d1aa?d=identicon)[jprud67](/maintainers/jprud67)

---

Top Contributors

[![jprud67](https://avatars.githubusercontent.com/u/19764576?v=4)](https://github.com/jprud67 "jprud67 (2 commits)")

### Embed Badge

![Health badge](/badges/dahovitech-menu-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/dahovitech-menu-bundle/health.svg)](https://phpackages.com/packages/dahovitech-menu-bundle)
```

###  Alternatives

[symfony/framework-bundle

Provides a tight integration between Symfony components and the Symfony full-stack framework

3.6k235.4M9.7k](/packages/symfony-framework-bundle)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)[prestashop/prestashop

PrestaShop is an Open Source e-commerce platform, committed to providing the best shopping cart experience for both merchants and customers.

9.0k15.4k](/packages/prestashop-prestashop)[contao/core-bundle

Contao Open Source CMS

1231.6M2.4k](/packages/contao-core-bundle)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

595.2M386](/packages/shopware-core)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
