使用Twig输出旧表单数据数组

时间:2016-01-26 20:09:56

标签: php arrays twig slim

我正在编写表单。我使用Select2允许用户在select标签中选择多个选项。如果还有其他错误,我会将用户重定向回表单并保留用户已输入或选择的值,这样他就不必再填写整个表单了。

在字段的其余部分,一切都很好,因为我可以通过使用request.post('input_name')函数来检索发布的信息。

当谈到这些多项选择时,我知道我得到了一个数组。 不知怎的,我知道如果我进行以下测试,确实会在数组中发布值:

{% if request.post('select2inputMultiple') %}
   <p>Data have been posted from select2 multiple</p>
{% endif %}

但是,如果我尝试显示(输出)如下数据:

{{request.post('select2inputMultiple')}}

它会抛出以下错误: An exception has been thrown during the rendering of a template ("Array to string conversion") 如何访问该阵列的项目?

嗯,看起来它正在运行,我正在尝试使用这样的foreach函数:

{% if request.post('select2inputMultiple') %}
   <p>Data have been posted from select2 multiple</p>
   {% for single in request.post('select2inputMultiple') %}
      value: {{single}}
   {% endfor %}
{% endif %}

它正在输出所需的数据!

1 个答案:

答案 0 :(得分:1)

假设您的输入名为select2inputMultiple[]request.post('select2inputMultiple')是一个数组(如错误所示)。您无法在页面上显示数组而无需中介将其转换为字符串。查看Twig值的最简单方法是使用dump方法,该方法映射到var_dump。所以你会这样做

{{ dump(request.post('select2inputMultiple')) }}

假设你有一个像这样的选择结构:

<select name="select2inputMultiple[]">
    {% for option in options %}
        <option value="{{ option.id }}">{{ option.name }}</option>
    {% endfor %}
</select>

从该数组中选择这些选项的最简单方法是:

<select name="select2inputMultiple[]">
    {% for option in options %}
        <option value="{{ option.id }}"
            {% if option.id in request.post('select2inputMultiple') %}
                selected
            {% endif %}
            >{{ option.name }}</option>
    {% endfor %}
</select>