2015-01-02 59 views
4

我想我的視圖代碼看起來是這樣的:KnpMenuBundle - 我如何設置一個圖標類到菜單的每個元素?

<li> 
    <a href="path/to/action"> 
      <i class="icon-class"></i> 
      <span class="title">Title</span> 
    </a> 
</li> 

創建通過菜單生成器菜單元素:

class Builder extends ContainerAware 
{ 
    public function adminMenu(FactoryInterface $factory, array $options) 
    { 
     $menu = $factory->createItem('root'); 

     $menu->addChild('Dashboard', array(
      'route' => 'admin_dashboard', 
     )); 

     return $menu; 
    } 
} 

我已經改寫爲下面的代碼(knp_menu.html.twig)觀點:

{% block linkElement %} 
    {% import _self as knp_menu %} 
    <a href="{{ item.uri }}"{{ knp_menu.attributes(item.linkAttributes) }}> 
     <i class="icon-class"></i> 
     <span class="title">{{ block('label') }}</span> 
    </a> 
{% endblock %} 

如何在Builder類中的方法adminMenu()中將圖標類名稱的值傳遞給<i>元素?什麼是最簡單的方法呢?

回答

7

您可以添加任何屬性要與

$menu->addChild('Dashboard', array(
    'route' => 'admin_dashboard', 
))->setAttribute('icon', 'icon-class'); 

然後

{{ item.attribute('icon') }} 
+0

非常感謝! :) – klapaucius

0

簡單:

$menu->addChild('Home', ['route' => 'home_page']) 
     ->setAttribute('icon', 'fa fa-home'); 
+0

非常感謝! – klapaucius

2

我建議使用extras代替attributes,因爲attributes用於呈現li元素的a ttributes。

$menu->addChild('Dashboard', array(
    'uri' => '#', 
))->setAttribute('icon', 'icon-class'); 

{{ item.attribute('icon') }} 

可能會被渲染爲:

<li icon="icon-class"><a href="#"><i class="fa fa-icon-class" aria-hidden="true"></i> Dashboard</a></li> 

鑑於:

$menu->addChild('Dashboard', array(
    'uri' => '#', 
))->setExtra('icon', 'icon-class'); 

{{ item.extra('icon') }} 

很可能只是被渲染爲:

<li><a href="#"><i class="fa fa-icon-class" aria-hidden="true"></i> Dashboard</a></li> 

也看到這樣的回答:https://stackoverflow.com/a/19095287/2106834

相關問題