将旧版Knp-Menu代码迁移到2.0版的说明

时间:2017-03-07 19:07:09

标签: symfony knpmenubundle

我需要将真正旧版的Knp Menu迁移到最新版本。真正的问题在这里

    $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);

如何按照KnpMenu第2版中的menu-as-service-way方式进行操作? 剩下的代码就是这个

菜单服务实施:

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;
    }

}

0 个答案:

没有答案