KNP MenuBundle — это пакет Symfony2 для очень динамичной обработки меню. В комплект поставки входит простой учебный пример, который можно найти здесь. В предложенном примере в классе Builder авторы предположили, что для объекта $menu должна быть вызвана функция setCurrentUri(). Однако $menu является экземпляром класса MenuItem, который не реализует вышеупомянутую функцию.
Чтобы сделать ответ автономным, я сообщаю код предоставленного примера класса здесь:
<?php
// src/Acme/DemoBundle/Menu/Builder.php
namespace Acme\DemoBundle\Menu;
use Knp\Menu\FactoryInterface;
use Symfony\Component\DependencyInjection\ContainerAware;
class Builder extends ContainerAware
{
public function mainMenu(FactoryInterface $factory, array $options)
{
$menu = $factory->createItem('root');
$menu->setCurrentUri($this->container->get('request')->getRequestUri());
$menu->addChild('Home', array('route' => 'homepage'));
$menu->addChild('About Me', array(
'route' => 'page_show',
'routeParameters' => array('id' => 42)
));
// ... add more children
return $menu;
}
}
PS: обратите внимание, что в этом примере отсутствует важный импорт, о котором я сообщаю ниже для полноты картины:
use Symfony\Component\HttpFoundation\Request;