Error: Object of class stdClass could not be converted to string (Symfony – Twig)

Hoy explicaremos un error que me he encontrado cuando estaba programando en symfony al intentar mostrar por pantalla, mediante Twig, la información.

Problema

He creado un command y un controller en Symfony para recibir datos externos que me envían. Los datos los he guardado en un log en formato String y quiero que se muestren por pantalla mediante Twig.

He cogido los datos del log en la variable $contents y los he pasado a un array de la siguiente forma:

// divide y convierte un string en un array mediante el caracter ;
$data = explode(";", $contents);

$num = 0;
$dataJson = [];

while ($num < count($data) -1) {
   array_push($dataJson, json_decode($Data[$num]));
   $num++;
}

Devuelvo el array $dataJson para poderlo leer en Twig mediante la variable $data_log.

<ul> 
 {% for data in data_log %}
        <li>{{ data["data"] }}</li>
 {% endfor %}
</ul>

Al pasar los datos todo correcto, pero al intentar mostrarlos mediante el for anterior, me da el siguiente error:

Este error nos indica que no es un array y no puede acceder a la llave data.

Detalles

Realmente mis datos de dentro del array $data_log no es un array, son objetos y por eso no me lo lee.

He estado revisando como podría leer el objeto desde Twig y no he encontrado nada, hasta que he encontrado la solución.

Solución

La solución es muy sencilla, solo hay que meter un segundo parámetro en el comando json_decode. El valor debe ser true.

De esta forma, transforma el objeto en un array asociativo y twig puede leerlo sin problemas.

Por tanto, el código quedaría de la siguiente forma:

// divide y convierte un string en un array mediante el caracter ;
$data = explode(";", $contents);

$num = 0;
$dataJson = [];

while ($num < count($data) -1) {
   array_push($dataJson, json_decode($Data[$num], true));
   $num++;
}

Si deseáis más información al respecto de json_decode de PHP, os dejo enlace:

https://www.php.net/manual/es/function.json-decode


Espero que os pueda servir.

Saludos.

Deja un comentario