Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Problemas al traer datos con FOSRestBundle

22 de septiembre de 2015

Hola a todos,

El problema de hoy es con una API que estoy desarrollando. Existen dos entidades principales, una que es Persona, y la otra que se relaciona es Address. Una persona puede tener una o varias direcciones. Existen entidades secundarias que son Pais, Estado, Ciudad que se relacionan con la entidad Address, hasta ahí no hay problema.

Al traer los datos por REST de la entidad persona, me funciona bien y me muestra algo similar a esto:

[
  {
    "id": 1,
    "document_type": "CC",
    "document": 72374149,
    "first_name": "Pedro",
    "last_name": "Gomez",
    "gender": "M",
    "email": "[email protected]",
    "persons": [],
    "address": [],
    "created_at": "2015-09-17T23:36:03-0500",
    "update_at": "2015-09-17T23:36:03-0500"
  },

El problema lo tengo es cuando traigo los datos de una persona que tiene una dirección, pues me trae en el json el listado de todos los paises, todas las provincias y todas las ciudades.

[{
    "id": 1,
    "document_type": "CC",
    "document": 72374149,
    "first_name": "Pedro",
    "last_name": "Gomez",
    "gender": "M",
    "email": "[email protected]",
    "persons": [],
    "address":[{
        "id": 2,
        "address1": "Calle 23 68 50",
        "city":{
          "id": "13 - 042",
          "name": "Arenal",
          "state":{
            "id": "13",
            "name": "Bolívar",
            "country":{
              "id": "CO",
              "name": "COLOMBIA",
              "states":{
                "0":{
                  "id": "05",
                  "name": "Antioquia",
                  "cities":[{
                      "id": "05 - 001",
                      "name": "Medellín",
                      "slug": "05-001",
                      "addresses": []
                    },{
                      "id": "05 - 002",
                      "name": "Abejorral",
                      "slug": "05-002",
                      "addresses": []
                    },{
                      "id": "05 - 004",
                      "name": "Abriaquí",
                      "slug": "05-004",
                      "addresses": []
                    },{
                      "id": "05 - 021",
                      "name": "Alejandría",
                      "slug": "05-021",
                      "addresses": []
                    },
... y continua

Si alguien tiene alguna idea de como puedo solucionar esto, se los agradezco.


Respuestas

#1

Bueno, me respondo la pregunta para el que le pueda servir.

Resulta que al serializar la entidad para REST, se trae absolutamente todos los datos de relaciones y demás.

Lo que hice fue lo siguiente: en las entidades que quería usar REST les definí ExclusionPolicy y Expose que trae el JMSSerializerBundle y quedo así:

namespace AppBundle\Entity;
 
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Gedmo\Mapping\Annotation as Gedmo;
use JMS\Serializer\Annotation\ExclusionPolicy;
use JMS\Serializer\Annotation\Expose;
 
/**
 * AppBundle\Entity\Event
 *
 * @ORM\Table(name="tb_event")
 * @ORM\Entity(repositoryClass="AppBundle\Entity\EventRepository")
 *
 * @ExclusionPolicy("all")
 */
 
class Event
{
    /**
     * @var integer $id
     *
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     *
     * @Expose
     */
    protected $id;
 
    /**
     * @ORM\Column(type="string")
     *
     * @Expose
     */
    protected $nombre;
 
    /**
     * @ORM\Column(type="datetime")
     */
    protected $inicio;

Con esto solamente las propiedades que tienen @Expose se muestran en el json.

Espero que sea de ayuda y si alguien tiene una forma diferente de hacerlo me gustaría saberlo.

@miguelplazasr

4 octubre 2015, 4:40