4

我已经看到有关此问题的其他错误。我做了同样的事情。当我尝试渲染菜单时,出现此致命错误:

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

这就是我的 Builder 的外观:

<?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 上的问题跟踪器,似乎这个问题已经解决了,但为什么我又遇到了同样的问题?

我的意思是,当我var_dump($menu),它清楚地说它是一个MenuItem并且看到 KnpMenu 的文档,setCurrentUri()我的$menu.

4

4 回答 4

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 回答
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 回答
1

从 v1.1.0 开始,该方法似乎MenuItem::setCurrentUri()已被弃用。有关更多信息,请参阅https://github.com/KnpLabs/KnpMenu/issues/63。该问题有几个关于如何设置菜单的当前uri的链接UrlVoter

于 2012-09-10T17:01:27.197 回答
0

我找到了最简单的解决方案。只需添加:

$menu->setCurrent(true);

它将类“当前”添加到当前菜单。方法setCurrentUri已被弃用,后来从 knpmenu 中删除。

于 2017-03-21T12:09:16.813 回答