过滤器操作后 Twig 内部服务器错误

Twig internal server error after filter manipulation

我 运行 喜欢 Twig 的这种疯狂行为:我有这个 的姓名和姓氏数组(打包成一个字符串),看起来像这样:

[0] "Name1 Surname1"
[1] "Name2 Surname2"
      ...
[N] "NameN SurnameN"

我想以如下方式显示每个名字+姓氏的方式来操作这个数组:

N. Surname

然后输出会和一些其他的数据一起放在一个table中,这就是所说的table:

的结构
...
<div class="table-responsive">
  <table class="table table-hover table-bordered table-condensed">
    <thead class="header">
      <tr>
        <th class="text-center">Field 1</th>
        <th class="text-center">Field 2</th>
        <th class="text-center">Field 3</th>
        <th class="text-center">Field 4</th>
      </tr>
    </thead>
    <tbody>
    {#
      data is an associative array with 4 keys
    #}
    {% for data in parameters.list %}
      <tr class="text-center">
        <td>...</td>
        {% set new_name = data.nameSurnames|split(' ', 2) %}
        <td><span class="name">{{new_name[0]|first}}. {{new_name[1]}}</span><br /><small>{{data.keyThree|raw}}</small></td>
        <td>...</td>
        <td>...</td>
      </tr>
    {% endfor %}
    </tbody>
  </table>
</div>
...

我遵循的过程可以在上面的代码片段中看到。 有趣的是 new_name[1] 生成了 500 Internal Server Error 而我真的不明白为什么。 如果在 for 循环中我这样做:

{{dump(new_name)}}

输出为:

array(2) { [0]=> string(5) "Name1" [1]=> string(8) "Surname1" } array(2) { [0]=> string(5) "Name2" [1]=> string(8) "Surname2" } ... array(2) { [0]=> string(5) "NameN" [1]=> string(8) "SurnameN" }

如果我这样做:

{{dump(new_name[0])}}

输出为:

string(5) "Name1" ... string(5) "NameN"

但任何涉及 new_name[1] 的内容都会产生 500 错误,即使 dump(new_name) 显示 new_name[1] 已定义..

调查问题,有相同的元素没有姓氏值,所以代码:

{% set new_name = data.nameSurnames|split(' ', 2) %}
<td><span class="name">{{new_name[0]|first}}. {{new_name[1]}}</span><br /><small>{{data.keyThree|raw}}</small></td>

如果没有很好地解释 {{ new_name[1] }} 指令,将失败。

is defined 控件包围它:

{% if new_name[1] is defined %}{{new_name[1]}}{%endif%}

解决问题。

查看评论以供进一步参考。

已经打开一个关于错误信息的疑问(Silex框架)