2012-08-08 21 views
7

estoy usando esto:Cómo convertir objeto de JSON en Symfony2

$users = $em->getRepository('UserBundle:User')->getallUsers($search); 
    $response = new Response(json_encode($users)); 
    $response->headers->set('Content-Type', 'application/json'); 
    return $response; 

Los usuarios son múltiples entidades resultado no solo.

Pero yo estoy haciendo esto:

[{},{},{},{},{},{}] 

Quiero algo como:

[ { label: $user.getName(), value: $user.getId() }, ... ] 

¿Cómo puedo hacer eso?

EDIT: También trató json_encode($users->toArray()) entonces me sale este error:

Call to a member function toArray() on a non-object

+1

¿Qué versión de Symfony utiliza? –

+0

Symfony 2.1 última versión – user825904

Respuesta

6

Usted necesita tener una manera de serializar los objetos, no se puede esperar json_encode de adivinar mágicamente los campos que se permitió estar codificado

Un buen paquete que recomiendo para esta tarea es JMSSerializerBundle. ¡Asegúrese de leer atentamente la documentación antes de usarla!

El resultado final probablemente se verá así:

$users = $em->getRepository('UserBundle:User')->getallUsers($search); 
$response = new Response($container->get('serializer')->serialize($users, 'json')); 
+1

Ya he instalado JMSSerializerBundle pero recibo este error 'Ha solicitado un servicio de" serializador de servicio inexistente ". ¿Cómo puedo declinar el servicio para JMS – user825904

+0

? No está instalado correctamente si obtiene este error. – Inoryy

+0

está allí en el proveedor de jms y su última versión – user825904

0

Trate {{ your_variable|raw }}

Lo siento por tarde

+0

Bueno, este es el mejor método fácil, pero no es automático y requiere la implementación de la función '__toString()' en una clase, que devuelve 'json_serialize (array (..) producto) ' – Croll