J'ai essayé d'intégrer KnpMenuBundle comme un service tel qu'indiqué dans la doc.

J'ai simplement copié-collé le code, plus ou moins tel quel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
// AppBundle/Menu/MenuBuilder.php

namespace AppBundle\Menu;

use Knp\Menu\FactoryInterface;

class MenuBuilder
{
    private $factory;

/**
     * @param FactoryInterface $factory
     *
     * Add any other dependency you need
     */
public function __construct(FactoryInterface $factory)
    {
        $this->factory = $factory;
}

    public function createMainMenu()
    {
        $menu = $this->factory->createItem('root');
$menu->addChild('Home', array('route' => 'homepage'));
return $menu;
}
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
# app/config/services.yml
app.menu_builder:
    class: AppBundle\Menu\MenuBuilder
    arguments: ["@knp_menu.factory"]
    tags:
- { name: knp_menu.menu_builder, method: createMainMenu, alias: main } # The alias is what is used to retrieve the menu
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# app/config/config.yml

imports:
- { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: services.yml }

[...]

knp_menu:
    twig:
        template: knp_menu.html.twig
    templating: false
    default_renderer: twig
Et j'appelle le service dans mon template comme indiqué, avec l'alias "main" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
{% extends 'logged.html.twig' %}

{% block body %}
{{ knp_menu_render('main') }}
    <div id="bienvenue">
        <h3>Bonjour, {{ user.nom }} {{ user.prénom }}</h3>
    </div>
{% endblock %}
Symfony me renvoie une erreur :
An exception has been thrown during the rendering of a template ("The menu "main" is not defined.") in accueil.html.twig at line 6.

La question a déjà été posée sur StackOverflow et Github, mais aucune des réponses ne m'a aidé.
Et je n'ai pas trouvé comment débugger le problème.