Выходной массив в Twig

Я пытаюсь вывести массив из базы данных на экран. В моей сущности:

/**
 * @ORM\Column(type="array", nullable=true)
 */
private $category;

В моей ветке шаблон:

{% for category in user.profile.category %}
    {{ category }}
{% endfor %}

Ошибка: Array to string conversion in...

Где моя ошибка?

Ответ 1

TWIG не знает, как вы хотите отображать таблицу.

Кстати, вы должны рассмотреть именование переменной $categories вместо $category, так как таблица содержит несколько категорий.

Затем попробуйте следующее:

{% for category in user.profile.categories %}
   {{ category }}
{% endfor %}

Если мой ответ не поможет, сообщите нам структуру вашего массива (есть ли в вашей таблице какие-либо ключи или подмассивы или это просто список?)

Ответ 2

Итак, как показывает ошибка, вы пытаетесь преобразовать массив (в переменной category) в строку. Вы можете просмотреть массив dump() (doc.). В вашем случае:

{% for category in user.profile.category %}
    {{ dump(category) }}
{% endfor %}

Обратите внимание, что dump() следует использовать только для отладки.

Ответ 3

Вы можете использовать join для вывода массива в виде объединенной строки. Он ведет себя как implode() в php.

Пример:

{{ [1, 2, 3]|join }}
{# returns 123 #}

{{ [1, 2, 3]|join('|') }}
{# outputs 1|2|3 #}

{{ [1, 2, 3]|join(', ', ' and ') }}
{# outputs 1, 2 and 3 #}

Смотрите документацию по соединению веток.

Ответ 4

Для тех, кто хочет легко получить ассоциативный массив:

(здесь массив - user.profile.category)

        <table>
            <tr>
                {% for key,value in user.profile.category[0] %}
                    <td>{{key|e }}</td>
                {% endfor %}
            </tr>

            {% for cat in user.profile.category %}
                <tr>
                    {% for cell in cat %}
                        <td>{{ cell|e }}</td>
                    {% endfor %}
                </tr>
            {% endfor %}
        </table>