首页 > 解决方案 > Symfony 4 twig 学说,将子菜单关联到下拉列表

问题描述

我目前正在 symfony 下做一个网站。在导航中,我用 twig 用这个结果调用我的数据库的内容。这里的代码:

{% for advert in listWorker %}
{% if advert.client != 'xxxxx' %}
<li class="sidebar-dropdown">
    <a href="#">
        <span>{{ advert.client }}</span>
    </a>
    <div class="sidebar-submenu">
        <ul>
            <li>
                <a href="#">{{ advert.nom }}</a>
            </li>
        </ul>
    </div>
</li>
{% endif %}
{% endfor %}

但是,我希望结果看起来像这样,我真的不知道如何将名称与同一列表中的相同客户相关联......

这是我的控制器

标签: symfonydoctrinetwig

解决方案


由于缺少来自 $worker->findAll() 的原始数据,这里有一个 symfony 可以返回的虚拟数据示例:

$db = array(
    '1' => array(
        'client1' => 'name1'
    ),
    '2' => array(
        'client1' => 'name2'
    ),
    '3' => array(
        'client2' => 'name1'
    ),
    '4' => array(
        'client2' => 'name2'
    ),
    '5' => array(
        'client2' => 'name3'
    ),
    '6' => array(
        'client3' => 'name1'
    ),
    '7' => array(
        'client1' => 'name2'
    )
);

然后您可以创建一个新数组,该数组将由 client 重新组合所有内容:

$final = [];

foreach($db as $item)
{
    $key = key($item);
    $final[$key][] = $item[$key];
}

这个数组的外观:

array(3) {
  ["client1"]=>
  array(3) {
    [0]=>
    string(5) "name1"
    [1]=>
    string(5) "name2"
    [2]=>
    string(5) "name2"
  }
  ["client2"]=>
  array(3) {
    [0]=>
    string(5) "name1"
    [1]=>
    string(5) "name2"
    [2]=>
    string(5) "name3"
  }
  ["client3"]=>
  array(1) {
    [0]=>
    string(5) "name1"
  }
}

将它传递给您的 index.html.twig 视图并对其进行迭代。
一些阅读材料:树枝嵌套循环


推荐阅读