KnpMenu,无法设置当前菜单项

时间:2012-09-10 16:45:56

标签: symfony symfony-2.1 knpmenu

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

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的文档,我的{{1}肯定有setCurrentUri()方法}。

4 个答案:

答案 0 :(得分: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;}

答案 1 :(得分: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);

//...

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

setCurrentUri

它增加了班级&#39;当前&#39;到当前菜单。方法$config['smtp_host'] = 'xxx'; $config['protocol'] = 'smtp'; $this->email->initialize($config); $this->email->from('xxx', 'xxx'); $this->email->to('xxx'); $this->email->subject($_POST['id']." ".$_POST['title']); $this->email->message('See attachment.'); $this->email->attach($filepath); $this->email->send(); 已被弃用,后来又从knpmenu中删除。