Twig 将多个事物合并到一个数组中

Meu*_*les 2 arrays symfony twig

我正在尝试为订单系统创建一个包含日期的数组。这些日期对应于商店无法交付的天数。

我在创建该数组时遇到了麻烦,因为值是字符串,并且merge过滤器不断产生错误。 我只能访问商店的前端,所以我无法创建自定义功能。

最终结果需要是一个包含所有日期的数组,以便我可以将其用作 javascript 数组,如下所示:

var closed = [
  {{ closedDates }} // ["01-01-2018", "02-01-2018", etc...]      
];
Run Code Online (Sandbox Code Playgroud)

所以我所拥有的是:

1) 网上商店填写他们关闭的单个天数,也许是一系列天数。这是三个变量,如:

 {{ closedDays }} {# produces eg 01-01-2018, 02-01-2018, 03-01-2018 { it's dd-mm-yy #} 
 {{ date_range_start }} {# produces eg. 10-01-2018 #}
 {{ date_range_end }} {# produces eg. 20-01-2018 #}
Run Code Online (Sandbox Code Playgroud)

2)所以我所做的是:

 {% set closedDates = [] %}    


  {% if theme.closedDays %}
    {% set foo = theme.closedDays %}
    {% for i in foo | slice(0, 5) %}
       {% set closedDates = closedDates | merge(i) %}
    {% endfor %}

  {% endif %}

  {% if theme.date_range_start and theme.date_range_end  %}
     {% set start_date = theme.date_range_start  %}
     {% set end_date = theme.date_range_end %}

     {# below function lists all days between start and end date #}
     {% for weekRange in range(start_date|date('U'), end_date|date('U'), 86400 ) %}
        {% set closedDates = closedDates | merge(weekRange | date('d-m-Y')) %} 
     {% endfor %}
  {% endif %}
Run Code Online (Sandbox Code Playgroud)

当我像上面那样做时,我收到一条错误消息The merge filter only works with arrays or hashes;。但是如何使用这些值创建一个数组呢?这样做merge才对吗?!

非常感谢任何帮助。

ent*_*tio 7

在 Twig 中,您不能只是将元素推送到数组中。相反,您必须将数组与另一个数组合并。

给定一个数组:

{% set firstArray = ['a', 'b'] %}
Run Code Online (Sandbox Code Playgroud)

如果要添加元素 'c',则必须合并它以提供一个数组,即使要添加单个字符串元素也是如此。

{% set firstArray = firstArray | merge(['c']) %}
Run Code Online (Sandbox Code Playgroud)

如果您使用关联数组,则类似:

{% set secondArray = {'a': 'string a', 'b': 'string b' } %}
{% set secondArray = secondArray | merge({'b': 'overwritten!', 'c': 'string c' }) %}
Run Code Online (Sandbox Code Playgroud)

唯一的区别是元素b将被 中的值覆盖secondArray,因此您将获得:

{
   'a': 'string a',
   'b': 'overwritten!',
   'c': 'string c'
}
Run Code Online (Sandbox Code Playgroud)