You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal Twig中URL与字符串拼接及路径匹配问题求助

解决Drupal Twig中url('<front>')拼接路径的问题

我懂你碰到的这个坑了——在Drupal的Twig模板里,url('<front>')返回的是可渲染数组(Renderable Array),不是直接的字符串,所以直接和'app'拼接才会出现"Arrayapp"这种离谱结果,你试的.markup也不对,因为数组的正确键名是#markup,不是markup。

下面给你几个实用的解决方案:

1. 正确生成目标URL的方法

方法一:用|render过滤器转成字符串

先通过|render把url('<front>')的结果渲染成字符串,再拼接'app':

{% set url_app = url('<front>')|render ~ 'app' %}

这个方法会输出完整的绝对URL(比如http://myweb/app),注意如果你的首页URL末尾不带斜杠,记得手动补一个,改成url('<front>')|render ~ '/app',避免出现http://mywebapp这种错误。

方法二:用path()生成相对路径再组合

path('<front>')返回的是字符串形式的相对路径(比如/),先拼接出相对路径,再用url()生成完整绝对URL,这种方式Drupal会自动处理路径格式,更稳妥:

{% set relative_app_path = path('<front>') ~ 'app' %}
{% set url_app = url(relative_app_path) %}

方法三:直接取数组#markup键(不推荐)

虽然可以直接访问数组里的#markup值,但不建议这么做——可渲染数组可能包含缓存元数据或其他渲染逻辑,直接取#markup会跳过这些处理:

{% set url_app = url('<front>')['#markup'] ~ 'app' %}

2. 判断当前URL是否匹配目标路径

拿到正确的url_app后,你可以通过app.request对象获取当前请求的URL,再做判断:

{% set url_app = url('<front>')|render ~ 'app' %}
{% if app.request.uri starts with url_app %}
  {# 当前URL匹配,执行你的逻辑 #}
  <p>当前处于app路径下</p>
{% endif %}

如果只需要判断相对路径(更轻量),可以用app.request.pathinfo:

{% set app_relative_path = path('<front>') ~ 'app' %}
{% if app.request.pathinfo starts with app_relative_path %}
  {# 相对路径匹配的逻辑 #}
{% endif %}

额外小贴士

如果你的需求只是判断当前页面是否对应某个路由(比如'/app'对应路由app.page),直接用路由匹配会更可靠,不会因为域名或路径变化出错:

{% if app.request.attributes.get('_route') == 'app.page' %}
  {# 当前路由匹配 #}
{% endif %}

内容的提问来源于stack exchange,提问作者acruma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:12:11