2012-07-23 11 views
8

Tengo una pregunta sobre la representación del paquete KnpMenu para Symfony2. De he leído, debe haber una clase "actual" en el elemento de ruta coincidente. He leído la documentación de Knp y están diciendo algo sobre RouteVoter pero no puedo hacerlo funcionar. ¿Algunas ideas?Paquete de menú de nudo Elemento actual Symfony 2

Generador de código:

<?php 
// src/Acme/DemoBundle/Menu/Builder.php 
namespace Acme\DemoBundle\Menu; 

use Knp\Menu\FactoryInterface; 
use Symfony\Component\DependencyInjection\ContainerAware; 

class Builder extends ContainerAware 
{ 
    public function mainMenu(FactoryInterface $factory, array $options) 
    { 
     $menu = $factory->createItem('root'); 

     $menu->addChild('Home', array('route' => 'index')); 
     $menu->addChild('About Me', array('route' => 'products')); 

     return $menu; 
    } 
} 

Respuesta

4

Está a 10 meses en y me siguió a la solución ha indicado anteriormente, sin embargo me pareció que para ser enrevesado. Yo uso el siguiente método.

class Builder extends ContainerAware 
{ 
    public function mainMenu(FactoryInterface $factory, array $options) 
    { 
     $menu = $factory->createItem('root'); 
     // Manually set the current URI. 
     $menu->setCurrentUri($this->container->get('request')->getRequestUri()); 
     // ... 
    } 
} 

He hecho la vista gorda a la semántica, pero ¿qué pasa con un enfoque como el ejemplo de código anterior? Proporcione sus comentarios según sea necesario.

+0

Gracias por la solución. He estado buscando algo como esto. Espero, algún día, que el KnpMenuBundle 2.x sea estable y que podamos usar a los votantes. –

+0

Siguiendo la guía de KnpMenuBundle para usar el menú como servicio, el contenedor ya no es necesario. Puede obtener la solicitud orientando el servicio al alcance de la solicitud. –

+0

Vale la pena mencionar que esta solución alternativa falla en algunos casos. Por ejemplo, al usar la paginación. –