2012-07-23 3 views
8

나는 Symfony2의 KnpMenu 번들 렌더링에 관한 질문이 있습니다. 내가 읽은 바로는 일치하는 경로 항목에 "현재"클래스가 있어야합니다. Knp 설명서를 읽었는데 RouteVoter에 대해 뭔가 말하고 있지만 제대로 작동하지는 않습니다. 어떤 아이디어?KNP 메뉴 번들 현재 항목 심포니 2

빌더 코드 :

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

답변

4

이 10개월에 있고 난,이 솔루션은 위에서 설명한 다음 그러나 나는 그것이 뒤얽힌 것으로 확인. 나는 다음과 같은 방법을 사용한다.

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

나는 시선을 시선으로 돌렸지 만, 위의 코드 샘플과 같은 접근 방식에는 어떤 문제가 있습니까? 필요에 따라 피드백을 보내주십시오. 해결 방법에 대한

+0

감사합니다. 나는 이와 같은 것을 찾고 있었다. 언젠가는 KnpMenuBundle 2.x가 안정되어 유권자를 사용할 수 있기를 바랍니다. –

+0

메뉴를 서비스로 사용하기위한 KnpMenuBundle의 지침에 따라 컨테이너가 더 이상 필요하지 않습니다. 서비스 범위를 요청 범위로 지정하여 요청을받을 수 있습니다. –

+0

이 해결 방법이 실패하는 경우가 있습니다. 예를 들어, 페이지 매김을 사용할 때. –