在twig中使用merge()时,键值被'key'替换

mez*_*zod 8 php merge key symfony twig

我试图将一对键值添加到一个数组,其当前值为所有那些不以'_'开头的属性.由于某种原因,合并将"key"(即slug)的值替换为字符串"key".

例如,当slug是键中没有以'_'开头的唯一属性时,

key = slug
value = something
Run Code Online (Sandbox Code Playgroud)

它的行为如下:

{% for key,value in app.request.attributes.all %}
    {% if '_' != key | slice(0, 1) %}
        {{ dump(key) }}  // string(4) "slug"
        {% set params = params | merge({ key : value}) %}
        {{ dump(key) }} // string(4) "slug"
    {% endif %}
{% endfor %}
{{ dump(params) }} // array(1) { ["key"]=> string(9) "something" }
Run Code Online (Sandbox Code Playgroud)

我已经添加了转储在它们旁边返回的内容.

最终转储返回

array(1) { ["key"]=> string(9) "something" }
Run Code Online (Sandbox Code Playgroud)

虽然我在期待

array(1) { ["slug"]=> string(9) "something" }
Run Code Online (Sandbox Code Playgroud)

我说这是一个类似的问题,Twig忘记了数组密钥,但关于这个问题的结论是,这是一个mongodb问题,我没有使用它.我正在使用请求中的属性.

出于某种原因,merge({key:value})表现为merge({'key':value}).

Tho*_*ire 23

您需要用括号包装变量才能将其用作键.

{% set params = params | merge({ (key) : value}) %}
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用数值作为键,则使用此答案中的代码可能无法按预期运行.Twig的`merge`过滤器使用PHP的`array_merge`方法重新编号数值.这篇文章介绍了一种可能的解决方法(在您的数字值中加下下划线):http://obtao.com/blog/2014/06/use-variable-key-twig-array/ (5认同)

Lau*_* W. 5

使用数字键,您可能会在使用过滤器的过程中丢失密钥merge

我找不到任何有关应用于数组的“+”运算符的文档,但它在这种情况下效果很好:

{% set array = {(1): 2} + array %}
Run Code Online (Sandbox Code Playgroud)

来源:https ://github.com/twigphp/Twig/issues/2741#issuecomment-417445042

  • 谢谢你。我使用: `('id_' ~ number_variable)` 来解决密钥被替换的问题。 (2认同)