KNP MenuBundleは、非常に動的な方法でメニューを処理するためのSymfony2バンドルです。バンドルには、ここで提供されている簡単なチュートリアルの例が含まれています。提案された例では、Builderクラス内で、作成者は関数setCurrentUri()を$menuオブジェクトで呼び出す必要があると想定していました。ただし、$ 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;