首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KnpMenu,无法设置当前菜单项

KnpMenu,无法设置当前菜单项
EN

Stack Overflow用户
提问于 2012-09-11 00:45:56
回答 4查看 5.6K关注 0票数 4

我已经看到了关于这个问题的其他错误。我也做过同样的事情。当我试图渲染菜单时,我得到了这个致命的错误:

代码语言:javascript
复制
Fatal error: Call to undefined method Knp\Menu\MenuItem::setCurrentUri()
in ProjectBundle/Menu/Builder.php on line 23

下面是我的Builder的外观:

代码语言:javascript
复制
<?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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-11 01:01:27

看起来MenuItem::setCurrentUri()方法从v1.1.0开始就被弃用了。有关详细信息,请参阅https://github.com/KnpLabs/KnpMenu/issues/63。这个问题有几个关于如何使用UrlVoter设置菜单的当前uri的链接。

票数 1
EN

Stack Overflow用户

发布于 2013-09-30 23:51:46

如果问题是由于请求引起的,它应该不起作用。你可以试一试:

代码语言:javascript
复制
 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;}
票数 3
EN

Stack Overflow用户

发布于 2013-11-25 22:07:04

@aurny2420289给出了一个简单的解决方案。

但现在建议使用UriVoter

代码语言:javascript
复制
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);

//...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12356056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档