2012-09-10 8 views
4

이 문제에 대한 다른 오류를 보았습니다. 나는 똑같은 일을했다. 나는이 치명적인 오류를 얻을 메뉴를 렌더링 할 때 :KnpMenu, 현재 메뉴 항목을 설정할 수 없습니다.

Fatal error: Call to undefined method Knp\Menu\MenuItem::setCurrentUri() 
in ProjectBundle/Menu/Builder.php on line 23 

이 내 빌더 모습입니다 :

<?php 
use Knp\Menu\FactoryInterface; 
use Symfony\Component\DependencyInjection\ContainerAware; 
use Symfony\Component\HttpFoundation\Request; 

class Builder extends ContainerAware 
{ 

private $factory; 

public function __construct(FactoryInterface $factory) 
{ 
    $this->factory = $factory; 
} 

public function createMenu(Request $request) 
{ 

    $menu = $this->factory->createItem('root'); 
    $menu->setCurrentUri($request->getRequestUri()); 

    $menu->addChild('Home', array('route' => '_home')); 
    $menu->addChild('About', array('route' => '_about')); 
    $menu->addChild('Bullshit', array('route' => '_bullshit')); 

    return $menu; 
} 
} 

내가 Github에서의 이슈 트래커를 통해 갔다, 그리고이 문제가 된 것 같다 고정되어 있지만 같은 문제가 다시 발생하는 이유는 무엇입니까? I var_dump($menu), 그것은 분명이 MenuItem이고 KnpMenu의 문서를보고 말할 때

내 말은, 확실히 내 $menu에 대한 setCurrentUri() 방법이있다.

+0

아마도 번들의 이전 버전을 사용하고 계신 것입니까? Symfony 2.0 또는 2.1을 사용하고 있습니까? deps 또는 composer.json 파일을보고 특정 버전을 묻는 지 확인하십시오 –

+0

다른 방법으로 : 번들의 최신 버전을 사용하고 있습니까? 오래된 문서입니까? –

+0

설명서는 Github 페이지에 있습니다. – tolgap

답변

1

MenuItem::setCurrentUri() 메서드는 v1.1.0부터 사용되지 않습니다. 자세한 내용은 https://github.com/KnpLabs/KnpMenu/issues/63을 참조하십시오. 이 문제는 대신 UrlVoter을 사용하여 메뉴의 현재 URI를 설정하는 방법에 대한 몇 가지 링크가 있습니다.

+0

당신 말이 옳았습니다. 나는 그것을 스스로 찾을 수 없었습니다. 그래서'setCurrentUri()'가 작동해야한다는 두 가지 대답을 읽었습니다. 나는 RequestVoter를하고 VoterInterface를 구현했다. 이제 작동합니다. [Github의이 수정본] (https://github.com/KnpLabs/KnpMenuBundle/issues/122#issuecomment-6563863)을 참조하십시오. – tolgap

3

문제가 인 경우 작동하지 않아야합니다. 당신은 그것을 시도 할 수 있습니다 :

public function **CreateMenu**(\Knp\Menu\FactoryInterface $factory, array $options) 
{ $menu = $factory->createItem('root'); 

    $menu->setCurrentUri($this->container->get('request')->getRequestUri()); 
$menu->addChild('Home', array('route' => '_home')); 
$menu->addChild('About', array('route' => '_about')); 
.. 

return $menu;} 
2

@ aurny2420289 간단한 솔루션을 제공합니다.

하지만 지금은 내가 가장 간단한 해결책을 발견 UriVoter

use Knp\Menu\Matcher\Voter\UriVoter; 
use Knp\Menu\Renderer\ListRenderer; 

//... 

$matcher = new Matcher(); 
$matcher->addVoter(new UriVoter($_SERVER['REQUEST_URI'])); 

$renderer = new ListRenderer($matcher); 

//... 
+0

API는 개발자가 쉽게 접근 할 수 있습니다. – younes0

+0

어디에서이 코드를 작성해야합니까? – jekaby

0

를 사용하도록 제안합니다. 그냥 추가 :

$menu->setCurrent(true); 

현재 메뉴에 '현재'클래스가 추가됩니다. 방법 setCurrentUri은 더 이상 사용되지 않으며 나중에 knpmenu에서 제거됩니다.