Twig中能否使用变量调用path函数生成路由链接?
解决Twig中用变量生成路由链接的问题
没问题,我来帮你搞定这个问题!你遇到的异常是因为Twig对变量的引用方式不对——你之前写path('my_var')的时候,Twig会把'my_var'当成字面量字符串去查找对应的路由,而不是读取你定义的my_var变量的值,这自然找不到对应的路由啦。
正确的写法
直接去掉引号,把变量名直接传给path函数就可以了:
{# 假设你已经在模板中定义了my_var变量,比如my_var = 'XXX' #} <li><a href="{{ path(my_var) }}">XXXLabel</a></li>
结合数据库生成菜单的完整示例
既然你的目标是从数据库生成菜单,这里给你一个更贴合场景的完整流程:
控制器中获取数据库菜单数据
先从数据库取出包含路由名和标签的菜单数据,传到Twig模板:// 示例控制器代码 public function showMenu() { // 从数据库服务获取菜单条目,每个条目包含路由名和显示标签 $menuItems = $this->menuRepository->findAll(); // 假设$menuItems的结构是: // [ // ['route' => 'home', 'label' => '首页'], // ['route' => 'user_profile', 'label' => '个人中心'], // ] return $this->render('menu.html.twig', [ 'menu_items' => $menuItems, ]); }Twig模板中循环渲染菜单
在模板里遍历菜单数据,用每个条目的路由变量生成链接:<ul class="menu"> {% for item in menu_items %} <li> <a href="{{ path(item.route) }}">{{ item.label }}</a> </li> {% endfor %} </ul>
额外注意事项
- 确保从数据库取出的路由名和项目中定义的路由完全一致,否则还是会抛出路由不存在的异常;
- 如果路由需要参数(比如详情页的
id),可以在path函数中传入第二个参数:<a href="{{ path(item.route, { id: item.entity_id }) }}">{{ item.label }}</a>
内容的提问来源于stack exchange,提问作者Karmo
相关产品推荐
相关产品推荐

