Symfony 将旧Knp菜单代码迁移到2.0版的说明

Symfony 将旧Knp菜单代码迁移到2.0版的说明,symfony,knpmenubundle,Symfony,Knpmenubundle,我需要将一个非常旧版本的Knp菜单迁移到一个最新版本。真正的问题在这里 $collapse = new CollapseItem($group,$router->generate('seguridad_group_list'),array('class'=>'submenu'),'Primicia\SeguridadBundle\Menu\CollapseItem'); $collapse->setIcon('sp sp-ico-menu-grupo sp-ic

我需要将一个非常旧版本的Knp菜单迁移到一个最新版本。真正的问题在这里

    $collapse = new CollapseItem($group,$router->generate('seguridad_group_list'),array('class'=>'submenu'),'Primicia\SeguridadBundle\Menu\CollapseItem');
    $collapse->setIcon('sp sp-ico-menu-grupo sp-icon-display');
    $this->addChild($collapse);
如何使其遵循KNPENU版本2中的菜单作为服务方式? 代码的其余部分如下所示

菜单服务实现:

namespace Primicia\SeguridadBundle\Menu;

use Knp\Bundle\MenuBundle\Menu;

use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Router;
use Knp\Bundle\MenuBundle\Renderer\RendererInterface;

class SeguridadMenu extends Menu {
    /**
     * @param Request $request
     * @param Router $router
     * @param Container $container
 */


public function __construct(Request $request, Router $router, $container)
{
    parent::__construct();
    $this->setCurrentUri($request->getRequestUri());
    $this->setAttribute('class','nav nav-list menu_lateral');
    $translator = $container->get('translator');

    if($container->get('security.context')->isGranted('ROLE_ADMIN'))
    {

        $user = $translator->trans('menu.user.titles',array(),'SeguridadBundle');
        $signal = new CollapseItem($user,$router->generate('seguridad_user_list'),array('class'=>'submenu'),'Primicia\SeguridadBundle\Menu\CollapseItem');
        $signal->setIcon('sp sp-ico-menu-usuario sp-icon-display');
        $this->addChild($signal);


        $group = $translator->trans('menu.group.titles',array(),'SeguridadBundle');
        $collapse = new CollapseItem($group,$router->generate('seguridad_group_list'),array('class'=>'submenu'),'Primicia\SeguridadBundle\Menu\CollapseItem');
        $collapse->setIcon('sp sp-ico-menu-grupo sp-icon-display');
        $this->addChild($collapse);

    }
}

/**
 * Gets renderer which is used to render menu items.
 *
 * @return RendererInterface $renderer Renderer.
 */
public function getRenderer()
{
    if(null === $this->renderer) {
        if($this->isRoot()) {
            $this->setRenderer(new ApcRenderer());
        }
        else {
            return $this->getParent()->getRenderer();
        }
    }

    return $this->renderer;
}
}

CollapseItem类,用于$router->generate

namespace Primicia\SeguridadBundle\Menu;
use Knp\Menu\MenuItem;

class CollapseItem extends MenuItem
{
    protected $hasIcon;
    public function renderLink()
    {
        $label = $this->renderLabel();
        $uri = $this->getUri();
        if (!$uri) {
            die;
            return sprintf('<a class="dropdown-toggle" href="#">%s</a>', $label);
        }

        return sprintf('<a class="dropdown-toggle" href="%s">%s</a>', $uri, $label);
    }



    public function setIcon($icon)
    {
        $this->hasIcon=$icon;
        return $this;
    }

    public function getIcon()
    {
        return $this->hasIcon;
    }

}
namespace Primicia\SeguridadBundle\Menu;
使用Knp\Menu\MenuItem;
类CollapseItem扩展了MenuItem
{
受保护的$hasIcon;
公共函数renderLink()
{
$label=$this->renderLabel();
$uri=$this->getUri();
如果(!$uri){
死亡
返回sprintf(“”,$label);
}
返回sprintf(“”,$uri,$label);
}
公共功能设置图标($icon)
{
$this->hasIcon=$icon;
退还$this;
}
公共函数getIcon()
{
返回$this->hasIcon;
}
}