Symfony2 - Installer KnpMenuBundle

, par  admin

Bonjour,

Dans ce tuto, nous allons apprendre à créer un menu en tant que service à l’aide du bundle KnpMenuBundle pour Symfony2 :

Installation de KnpMenuBundle :

Déclaration du bundle dans le fichier app/ AppKernel.php
Ajouter la ligne suivante :

new Knp\Bundle\MenuBundle\KnpMenuBundle(),

Fichier app/config/config.yml

knp_menu:
   twig:
       template: knp_menu.html.twig
   templating: false
   default_renderer: twig

Configuration du Builder :

Créez ensuite un dossier menu à la racine de votre Bundle (MainBundle dans notre cas) dans lequel nous allons placer un fichier MenuBuilder.php :

<?php


namespace tuto\MainBundle\Menu;

use Knp\Menu\FactoryInterface;
use Symfony\Component\HttpFoundation\RequestStack;

class MenuBuilder
{
        private $factory;

        /**
         * @param FactoryInterface $factory
         */
        public function __construct(FactoryInterface $factory)
        {
                $this->factory = $factory;
        }

                public function createMainMenu(RequestStack $requestStack)
        {
                $menu = $this->factory->createItem('root');

                $menu->addChild('Home', array('route' => 'homepage'));
                $menu['Home']->addChild('Menu1', array('route' => '_mapage1'));
                $menu['Home']->addChild('Menu2', array('route' => '_mapage2'));
               
                $menu->addChild('Categorie1', array('route' => 'homepage'));
                $menu['Categorie1']->addChild('Menu1', array('route' => 'fos_user_security_login'));
                $menu['Categorie1']->addChild('Menu2', array('route' => 'fos_user_security_logout'));

                return $menu;        }
}

Vous pouvez connaître les identifiants de toutes les routes à l’aide de la commande suivante :

Configuration du service :

Fichier app/config/services.yml

services:
   app.menu_builder:
       class: tuto\MainBundle\Menu\MenuBuilder
       arguments: ["@knp_menu.factory"]

   app.main_menu:
       class: Knp\Menu\MenuItem
       factory: ["@app.menu_builder", createMainMenu]
       arguments: ["@request_stack"]
       tags:
           - { name: knp_menu.menu, alias: main }

Configuration du Template twig :

Placez enfin le code suivant à l’emplacement souhaité de votre Template twig :
{{ knp_menu_render('main') }}

Lien vers la doc officielle (en anglais) :
http://symfony.com/doc/master/bundles/KnpMenuBundle/index.html

Un peu de théorie... Tous les cours théoriques