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

问题描述 投票:0回答:3

我正在尝试将键值对添加到数组中,其中包含所有不以“_”开头的属性的当前值。由于某种原因,合并将“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忘记数组键类似的问题,但这个问题的结论是这是一个mongodb问题,我没有使用它。我正在处理请求中的属性。

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

php symfony merge key twig
3个回答
33
投票

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

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

5
投票

使用数字键时,您可能会在使用

merge
过滤器的过程中丢失密钥。

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

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

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


0
投票

@laurent-w你救了我。

我会分享我的代码,也许它也可以拯救某人

{% set payment_methods_keys = {} %}
{% for business_key, business_array in business %}
    {% for keys, saved_payment_method in business[business_key].saved_payment_methods %}
        {% set payment_methods_keys = {(business_key): keys} + payment_methods_keys %}
    {% endfor %}
{% endfor %}


<script type="text/javascript">
    function addPaymentMethod(businessKey) {
        let payment_methods_keys = JSON.parse('{{ payment_methods_keys | json_encode | raw }}');
        console.log(payment_methods_keys[businessKey]) //Result {2: 1, 8: 2}
</script>
© www.soinside.com 2019 - 2024. All rights reserved.