【问题标题】:KnpMenuBundle - how can i set an icon class to each elements of menu?KnpMenuBundle - 如何为菜单的每个元素设置图标类?
【发布时间】:2015-01-02 19:28:43
【问题描述】:

我想我的查看代码是这样的:

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

我通过 Menu Builder 创建菜单元素:

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() 中将图标类名称的值传递给 &lt;i&gt; 元素?最简单的方法是什么?

【问题讨论】:

    标签: php symfony knpmenubundle knpmenu


    【解决方案1】:

    你可以添加任何你想要的属性

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

    然后

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

    【讨论】:

      【解决方案2】:

      我建议使用extras 而不是attributes,因为attributes 用于呈现li 元素的属性。

      $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

      【讨论】:

      • 我认为这个答案应该被接受为最终答案。在我的 KnpMenuBundle 版本中,接受的那个甚至不起作用。
      【解决方案3】:

      简单地说:

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

      【讨论】:

        猜你喜欢
        • 2018-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        相关资源
        最近更新 更多