Я сталкиваюсь с этим сумасшедшим поведением от Twig: у меня есть этот длинный массив имен и фамилий (упакованных в одну строку), который выглядит так:
[0] "Name1 Surname1"
[1] "Name2 Surname2"
...
[N] "NameN SurnameN"
Я хочу манипулировать этим массивом таким образом, чтобы каждое имя + фамилия отображалось следующим образом:
N. Surname
Затем вывод будет объединен с некоторыми другими данными в таблице, это структура указанной таблицы:
...
<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)
{{dump(new_name)}}
не удалось бы. Однако вот пример.