过滤器操作后 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框架)
我 运行 喜欢 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框架)