KnpMenuBundle Comment faire un Breadcrumb
Cet article est obsolète, il existe une façon plus simple de faire un fil d’Ariane avec le Knp Menu Bundle.
Pas évident de trouver comment faire un fil d’Ariane ( ou breadcrumb ) avec le KnpMenuBundle…
On va la faire courte.
Dans un premier temps on va coder dans le « Builder » de menu, puis on va faire un peu de Twig
Le Builder
namespace WaldoColorfullBundleMenu;</p> <p>use KnpMenuFactoryInterface; use SymfonyComponentDependencyInjectionContainerAware;</p> <p>class Builder extends ContainerAware { public function mainMenu(FactoryInterface $factory, array $options) { $menu = $factory->createItem('main');</p> <p>$menu->addChild('Entrée 1', array('route' => '_route_entre_1')) ->addChild('Entrée 1.1', array('route' => '_route_entre_1_1')) ->addChild('Entrée 1.1.1', array('route' => '_route_entre_1_1_1'));</p> <p>$menu->addChild('Entrée 2', array('route' => '_route_entre_1')) ->addChild('Entrée 2.1', array('route' => '_route_entre_2_1')) ->addChild('Entrée 2.1.1', array('route' => '_route_entre_2_1_1'));</p> <p>return $menu; }</p> <p>// Code pompé honteusement ici https://github.com/KnpLabs/KnpMenuBundle/issues/122#issuecomment-12149706 public function myBreadCrumb(FactoryInterface $factory, array $options) { $menu = $this->leftExtranetMenu($factory, $options);</p> <p>$matcher = $this->container->get('knp_menu.matcher'); $voter = $this->container->get('knp_menu.voter.router'); $matcher->addVoter($voter);</p> <p>$treeIterator = new RecursiveIteratorIterator( new KnpMenuIteratorRecursiveItemIterator( new ArrayIterator(array($menu)) ), RecursiveIteratorIterator::SELF_FIRST );</p> <p>$iterator = new KnpMenuIteratorCurrentItemFilterIterator($treeIterator, $matcher);</p> <p>// Set Current as an empty Item in order to avoid exceptions on knp_menu_get $current = new KnpMenuMenuItem('', $factory);</p> <p>foreach ($iterator as $item) { $item->setCurrent(true); $current = $item; break; }</p> <p>return $current; }</p> <p>}
Le Twig
{% set currentItem = knp_menu_get('WaldoColorfullBundle:Builder:myBreadCrumb').getBreadcrumbsArray %}</p> <p>{% for item in currentItem %} {% if loop.index != 1 %} {% if loop.index > 2 %} > {% endif %} {% if not loop.last %}<a href="{{ item.uri }}">{{ item.label }}</a> {% else %}<span>{{ item.label }}</span>{% endif %} {% endif %} {% endfor %}
Bonjour,j’ai actuellement un souci avec Symfony2 et Twig.j’ai intégreé un syste8me de formulaire avec des champs obligatoires, qui sont required .Sous Chrome et Firefox, quand je valide le formulaire alors que les champs ne sont pas remplis, j’ai un rappel à l’ordre sous forme d’infobulle. Sous IE, le formulaire part, et bien sur j’ai une erreur car les champs requis sont vides. Auriez-vous unes piste SVP ? En vous souhaitant bonne journeé
[Troll]Refuser aux utilisateurs d’IE d’utiliser le web ;)[/Troll]
Firefox et Chrome intègre le HTML5 et ont dans leurs spécifications d’alerter l’utilisateur sur les champs obligatoires.
IE, « navigateur web » qui a perpétuellement une dizaine d’années de retard sur les autres n’intègre pas ces fonctionnalités.
Pour palier à cela il vous faut donc valider votre formulaire en PHP, et c’est à ce moment là que vous devez vérifier si les champs obligatoire sont tous remplis, mais ça Symfony2 le fait déjà pour vous http://symfony.com/fr/doc/current/book/validation.html.
Ca marche niquel merci beaucoup !! ;)