Шаблон Twig — доступ к массиву в массиве

Просто начал играть с шаблонами веток, и я столкнулся с проблемой. У меня есть массив, который я зацикливаю и извлекаю данные, в этом массиве у меня есть другой массив (изображения), к которому мне нужно получить доступ, проблема в том, что я не могу заставить его работать.

Вот корм, который я получил

0 =>
array (size=8)
'id' => int 1
'url' => string 'http://localhost' (length=16)
'image' => string '8cgbfenx2n1.png' (length=15)
'type' => string 'image' (length=5)
1 =>
array (size=10)
'id' => int 17
'images' =>
array (size=3)
0 => string 'xjv5y4asev2.png' (length=15)
1 => string 'kwwss8f6r34.gif' (length=15)
2 => string '68yfnckk3c5.png' (length=15)
'text' => string 'text' (length=4)
'type' => string 'article' (length=7)

Затем я перехожу и получаю доступ

{%- if feed is not empty -%}
{% for feedItems in feed %}

<!-- article -->
{% if feedItems.type == 'article' %}
<!-- image -->
<div class="gridTile-article-image">
{% for image in feedItems.images %}
{{ image }} <br />
{% endfor %}
</div>

{% endif %}{% endfor %}
{% endif %}

Это не выдает ошибку, но и ничего не выводит, у кого-нибудь есть идеи, как этого добиться?

Спасибо!

3

Решение

Похоже, вы пытаетесь вывести целый массив вместо одного из его индексов. feedItem.images это массив, как показано здесь:

 1 =>
array (size=10)
'id' => int 17
'images' => // The value of our index...
array (size=3) // ..is an array
0 => string 'xjv5y4asev2.png' (length=15)
1 => string 'kwwss8f6r34.gif' (length=15)
2 => string '68yfnckk3c5.png' (length=15)
'text' => string 'text' (length=4)
'type' => string 'article' (length=7)

Я предполагаю, что вы должны ссылаться на индекс images в самом внутреннем блоке. Для этого, как следует из этого ответа, используйте атрибут функция:
Доступ к значениям массива с помощью ключа массива из Twig

Итак, ваш код будет выглядеть так:

{%- if feed is not empty -%}
{% for feedItems in feed %}

<!-- article -->
{% if feedItems.type == 'article' %}
<!-- image -->
<div class="gridTile-article-image">
{% for image in feedItems.images %}
{{ attribute(image, 0) }} <br /> // Assuming you want to print "xjv5y4asev2.png"{% endfor %}
</div>

{% endif %}{% endfor %}
{% endif %}
4

Другие решения

Поэтому я решил, чего мне не хватало. Следующий (оригинальный) синтаксис у меня отлично работал, но я сделал очень глупую человеческую ошибку.

<div class="gridTile-article-image">
{% for image in feedItems.images %}
{{image}}
{% endfor %}
</div>

Причина, по которой это возвращалось пустым, заключалась в том, что массив изображений в ленте, который я запрашивал, был фактически пустым! Я искал массив, который уже был заполнен, но это не был тип «article», и поэтому мой код в этом блоке не возвращал никаких изображений, потому что их не было!

Спасибо за вашу помощь!

2

По вопросам рекламы [email protected]