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

时间:2013-03-16 20:54:23

标签: php symfony merge key twig

我正在尝试将一对键值添加到数组中,其中所有这些属性的当前值不是以'_'开头。由于某种原因,合并将“key”(即slug)的值替换为字符串'key'。

例如,当slug是唯一一个键不以'_'开头的属性时,

key = slug
value = something

表现如下:

{% 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" }

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

最终转储返回

array(1) { ["key"]=> string(9) "something" }

虽然我期待

array(1) { ["slug"]=> string(9) "something" }

我说这与Twig forgets array-keys有类似的问题,但关于这个问题的结论是,这是一个mongodb问题而我没有使用它。我正在使用请求中的属性。

由于某种原因,合并({key:value})表现为合并({'key':value})。

2 个答案:

答案 0 :(得分:22)

您需要用括号包装变量,以便能够将其用作键。

{% set params = params | merge({ (key) : value}) %}

答案 1 :(得分:0)

使用数字键,可以在使用合并过滤器的过程中丢失密钥。

我找不到有关应用于数组的'+'运算符的任何文档,但是在这种情况下,它运行良好:

{% set array = {(1): 2} + array %}

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