我已经看到了有关此问题的其他错误。我做了完全相同的事情。当我尝试渲染菜单时,我得到了致命错误:
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()
方法}。
答案 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中删除。