我已经看到了关于这个问题的其他错误。我也做过同样的事情。当我试图渲染菜单时,我得到了这个致命的错误:
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。
发布于 2012-09-11 01:01:27
看起来MenuItem::setCurrentUri()方法从v1.1.0开始就被弃用了。有关详细信息,请参阅https://github.com/KnpLabs/KnpMenu/issues/63。这个问题有几个关于如何使用UrlVoter设置菜单的当前uri的链接。
发布于 2013-09-30 23:51:46
如果问题是由于请求引起的,它应该不起作用。你可以试一试:
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-11-25 22:07:04
@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);
//...https://stackoverflow.com/questions/12356056
复制相似问题