【问题标题】:key value being replaced by 'key' when using merge() in twig在树枝中使用 merge() 时,键值被“键”替换
【发布时间】:2013-03-05 11:29:20
【问题描述】:

我正在尝试将键值对添加到数组中,并为所有不以“_”开头的属性添加当前值。出于某种原因,合并将“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 问题,我没有使用它。我正在处理请求中的属性。

由于某种原因,merge({ key : value}) 的行为类似于 merge({ 'key' : value})。

【问题讨论】:

    标签: php symfony merge key twig


    【解决方案1】:

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

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

    【讨论】:

    • 不客气,请考虑验证此答案是否正确,谢谢!
    • 在 foreach 中做这样的事情:{% set years = years |合并({(年):年})%}得到:1 =>字符串'2014'(长度= 4)2 =>字符串'2014'(长度= 4)
    • 如果您使用数值作为键,则使用此答案中的代码可能无法达到预期效果。 Twig 的 merge 过滤器使用 PHP 的 array_merge 方法重新编号数值。这篇文章描述了一种可能的解决方法(在数字值中添加下划线):obtao.com/blog/2014/06/use-variable-key-twig-array
    【解决方案2】:

    使用数字键,您可能会在此过程中丢失您的密钥,使用 m̀erge`过滤器。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 2016-06-21
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多