22

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,817
  • 2
  • 17
  • 27
nowiko
  • 2,507
  • 6
  • 38
  • 82

5 Answers5

30

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,807
  • 6
  • 34
  • 45
24

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
  • 8,772
  • 4
  • 28
  • 32
  • 1
    Here the new link fot the doc : https://twig.symfony.com/doc/3.x/filters/join.html – Snow Nov 09 '21 at 08:30
7

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,230
  • 1
  • 14
  • 23
0

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
  • 5,135
  • 11
  • 42
  • 61
0

In Opencart 4 you need to add $this->addExtension(new \Twig\Extension\DebugExtension());

in public function __construct(LoaderInterface $loader, $options = []) system\storage\vendor\twig\twig\src\Environment.php

and enable set debug' => true, // Initialize Twig environment

in public function render(string $filename, array $data = [], string $code = ''): string { system\library\template\twig.php