4

この問題に関する他のエラーを見てきました。私はまったく同じことをしました。メニューをレンダリングしようとすると、次の致命的なエラーが発生します。

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 のドキュメントを見ると、間違いなくsetCurrentUri()my のメソッドがあることがわかり$menuます。

4

4 に答える 4

3

@ 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);

//...
于 2013-11-25T14:07:03.783 に答える
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;}
于 2013-09-30T15:51:46.037 に答える
1

It looks like the MenuItem::setCurrentUri() method was deprecated as of v1.1.0. See https://github.com/KnpLabs/KnpMenu/issues/63 for more information. That issue has several links on how to set the current uri of the menu using UrlVoter instead.

于 2012-09-10T17:01:27.197 に答える