2012-07-23 11 views
8

Ho una domanda riguardante il rendering del pacchetto KnpMenu per Symfony2. Da quello che ho letto, dovrebbe esserci una classe "corrente" nella voce rotta corrispondente. Ho letto la documentazione di Knp e stanno dicendo qualcosa su RouteVoter ma non riesco a farlo funzionare. Qualche idea?Pacchetto menu Knp Elemento corrente Symfony 2

Generatore di codice:

<?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; 
    } 
} 

risposta

4

E 'di 10 mesi su e ho seguito la soluzione sopra delineato, ma ho trovato ad essere contorto. Io uso il seguente metodo.

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()); 
     // ... 
    } 
} 

ho chiuso un occhio alla semantica, ma ciò che non va con un approccio come il codice di esempio di cui sopra? Si prega di fornire un feedback come richiesto.

+0

Grazie per la soluzione. Ho cercato qualcosa di simile. Spero che un giorno il KnpMenuBundle 2.x sia stabile e saremo in grado di utilizzare gli elettori. –

+0

Seguendo la guida di KnpMenuBundle per l'utilizzo del menu come servizio, il contenitore non è più necessario. È possibile ottenere la richiesta estendendo il servizio all'ambito della richiesta. –

+0

Vale la pena ricordare che questa soluzione non riesce in alcuni casi. Ad esempio, quando si utilizza l'impaginazione. –