使用knpmenu bundle在symfony 2.1中创建面包屑

Mis*_*een 4 php navigation breadcrumbs symfony knpmenubundle

在symfony 2.1.x中使用knpmenu bundle创建面包屑的最佳方法是什么?除了使用第3方派对.

更新:

嗨,theunraveler,抱歉迟到的答案.现在我一直在关注你的例子,我被困在一个时刻.在这里,下面的代码抛出异常,即

Missing argument 2 for Acme\DemoBundle\Menu\MenuBuilder::getBreadCrumbs()    

{% set item = knp_menu_get('main') %}
{{ knp_menu_render(item) }}
{% block breadcrumbs %}
    {% set breadcrumbs = knp_menu_get('breadcrumbs', [], {'request':    app.request, 'menu': item }) %}
    {{ dump(breadcrumbs) }}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

为什么它不接受"item"变量?

b.b*_*4rd 10

自版本以来2.0,getBreadcrumbsArray已被移至Knp\Menu\Util\MenuManipulator.

对此解决方案的可能锻炼是创建一个树枝扩展:

<?php

namespace Kimwild\CommonBundle\Twig;
use Knp\Menu\Util\MenuManipulator;
use Knp\Menu\ItemInterface;

class MenuManipulatorExtension extends \Twig_Extension
{

    public function getFunctions()
    {
        return array(
            new \Twig_SimpleFunction('menu_manipulator', array($this, 'menuManipulator')),
        );
    }

    public function menuManipulator(ItemInterface $item)
    {
        $manipulator = new MenuManipulator();
        return $manipulator->getBreadcrumbsArray($item);
    }


    public function getName()
    {
        return 'menu_manipulator';
    }

}
Run Code Online (Sandbox Code Playgroud)

注册枝条延伸:

kimwild_common.menu_manipulator_extension:
    class: Kimwild\CommonBundle\Twig\MenuManipulatorExtension
    public: false
    tags:
        - { name: twig.extension }
Run Code Online (Sandbox Code Playgroud)

在breadcrumb.html.twig中:

{% block root %}
    {%- for  link in menu_manipulator(item) %}
    /* whatever you want to do ... */
    {%- endfor %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)