16

I trying to output an array from the database to the screen. In my entity:

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

In my twig template:

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

Error: Array to string conversion in ...

Where is my mistake?

AmericanUmlaut
  • 2,729
  • 2
  • 15
  • 26
nowiko
  • 2,349
  • 6
  • 29
  • 69

4 Answers4

25

So, as error shows you are trying convert array (in category variable) to string. You can preview array by dump() (doc.). In your case:

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

Please notice that dump() should be use only for debugging.

NHG
  • 5,551
  • 6
  • 32
  • 44
17

You can use join to output an array as a concatenated string. It behaves like implode() in php.

Example:

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

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

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

See the twig join documentation.

milkovsky
  • 7,874
  • 3
  • 25
  • 29
8

TWIG doesn't know how you want to display your table.

By the way, you should consider naming your variable $categories instead of $category, as you table contains several categories.

Then try this:

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

If my answer doesn't help, please give us the structure of your array (is there any keys or sub-arrays in you table or is it just a list?)

Blacksad
  • 1,140
  • 1
  • 10
  • 21
-1

For anybody who want to output an associative array easily :

(here, the array is 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>
Cedric
  • 4,361
  • 10
  • 37
  • 55