如何在symfony Twig的navBar中制作for循环

How to make a for loop in a navBar in symfony Twig

提问人:Sebastien D 提问时间:11/14/2023 更新时间:11/14/2023 访问量:40

问:

我有一个带有下拉菜单的导航栏,我希望当您单击“国家/地区”按钮时,它会显示数据库中的所有国家/地区,为此,我首先创建了一个服务,允许您检索数据库中的所有国家/地区,这里是:

 <?php

namespace App\Service;

use App\Repository\PaysRepository;
use Doctrine\ORM\EntityManagerInterface;

  class PaysService
   {
private $paysRepository;

public function __construct(PaysRepository $paysRepository){
    $this->paysRepository = $paysRepository;
}

public function menuPays()
{
    $payList = $this->paysRepository->findAll();

   
   return $payList;
}
}

然后我创建了一个控制器,它允许您从服务中检索信息,这里是控制器:

#[Route('/nav', name: 'nav')]
public function nav(PaysService $paysService):Reponse
{
    $payList = $paysService->menuPays();

    return $this->render('nav.html.twig', [
        'payList' => $payList
    ]);
}

Il permet de donner au templates “nav” les nom des pays.

然后我创建了允许您显示导航栏的“nav”文件,并在其中创建了一个 for 循环来遍历 $payList 变量中存在的每个国家/地区。

 <li class="nav-item dropdown">
      <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-     toggle="dropdown" aria-expanded="false">
        Pays
      </a>
      <ul class="dropdown-menu">
      
        {% for pays in payList %}
              <li><a class="dropdown-item" href="#">{{ pays.nom}}</a></li>
        {% endfor %}
      </ul>
    </li>

但问题是,当我单击“国家/地区”按钮时,它没有向我显示任何内容,为了解决这个问题,我查看了服务是否恢复了数据库中的数据,这是正确的,然后我在 twig.yaml 文件中查看了我的服务配置

twig:
   debug: true
   default_path: '%kernel.project_dir%/templates'
   globals:
      payList: 'App.service.PaysService'
symfony 模板 变量 twig 导航栏

评论

0赞 Jakumi 11/14/2023
看起来好像你想同时做两件事,而且是在下拉列表中。首先,确保下拉列表本身有效(即在那里写一些静态输出,例如,如果您让它工作,请通过添加到模板的可见部分来检查变量是否在正确的范围内(如果存在,它将始终输出一些东西,或者失败)并且 twig 配置看起来很奇怪,如果你想那样做, 我不确定我能帮你。我宁愿添加一个事件侦听器来添加国家列表:twig.symfony.com/doc/3.x/advanced.html#globals<li>test test</li>{{ dump(payList) }}
0赞 DarkBee 11/14/2023
"我点击了“国家”按钮,它没有向我显示任何东西“ - 不确定你期待什么,但你已经设置了而不是实际的路线href#
0赞 IanMcL 11/15/2023
使用开发工具检查按钮 - 下面的代码中是否显示了国家/地区?
0赞 Sebastien D 11/15/2023
谢谢你的回答,起初我尝试了 Jakumi 的答案来测试它工作的 navBar 的下拉列表,并在 symfony 文档上查看了更多内容,我发现可以放置 Twig 扩展,所以我所做的是将我的服务传递给我的 Twig 扩展,然后我在我的 navBar 文件中使用了 Twig 扩展

答: 暂无答案