Symfony6中Twig的replace过滤器如何传递变量?
问题分析与解决
你的错误出在Twig replace 过滤器的哈希键写法上:你用了 {(replaces)} 这种格式,这不符合Twig的哈希语法规则,导致解析器无法正确识别键的结构,从而抛出语法错误。
正确写法
在Twig中,如果要使用变量作为哈希的键,需要用括号直接包裹变量,不需要额外的大括号。你可以直接修改replace的参数:
{% if form.vars.data.fileName|default %} {% set system_type_short = get_env("SYSTEM_TYPE_SHORT") %} {% set replaces = '/var/www/' ~ system_type_short ~ '.domain.de/public/uploads/images/' %} {% set url = 'uploads/images/' ~ form.vars.data.fileName|replace({ (replaces): '' }) %} <img src="{{ asset(url) }}" height="100"><br><br> {% endif %}
另一种更清晰的写法
你也可以先定义好替换映射数组,再传入replace过滤器,这样代码可读性更强:
{% if form.vars.data.fileName|default %} {% set system_type_short = get_env("SYSTEM_TYPE_SHORT") %} {% set replaces = '/var/www/' ~ system_type_short ~ '.domain.de/public/uploads/images/' %} {% set replace_map = { (replaces): '' } %} {% set url = 'uploads/images/' ~ form.vars.data.fileName|replace(replace_map) %} <img src="{{ asset(url) }}" height="100"><br><br> {% endif %}
核心逻辑是:Twig要求哈希的变量键必须用括号包裹,这样解析器才会将其识别为变量,而非字符串字面量。你之前的错误是多套了一层大括号,导致语法解析失败。
内容的提问来源于stack exchange,提问作者schwaluck
相关产品推荐
相关产品推荐

