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

Cómo asociar objetos automáticamente en una API REST

16 de febrero de 2016

Hola qué tal?

Les comento que estoy trabajando en conjunto con un amigo, en un proyecto (que espero se todos los puedan utilizar algún día), cuyo objetivo tiene el de facilitar el desarrollo de una API REST en Symfony. Se que ya hay bundles para esto, pero es el primer proyecto que hacemos con un amigo que está en GitHub, ya que ambos queremos empezar a desarrollar cosas para aportar a la comunidad.

En esta oportunidad les comento lo siguiente, tenemos desarrollada una clase llamada: RestEntity, de la cual deben extender todas las clases.

Dentro de ésta clase hay un método que se llama: exchangeArray(), la idea de éste método es el de cargar todos los datos de un array dentro de una entidad correspondiente, ya sea que ésta tenga asociaciones con otras entidades o no.

El código es este:

public function exchangeArray(array $data = array())
    {
        $annotationReader = new AnnotationReader();
        foreach ($data as $key => $value) {
            if (property_exists(get_class($this), $key)) {
                $reflectionProperty = new \ReflectionProperty(get_class($this), $key);
                $propertyAnnotations = $annotationReader->getPropertyAnnotations($reflectionProperty);
                if (property_exists(get_class($propertyAnnotations[0]), 'targetEntity')) {
                    $namespace = $this->_getNameSpace();
                    $newClass = $namespace . $propertyAnnotations[0]->targetEntity;
                    $this->$key = new $newClass;
                    $this->$key->exchangeArray($value);
 
                } else if ($key === 'fecha' && is_string($value)) {
                    $this->$key = new \DateTime($value);
                } else {
                    $this->$key = $value;
                }
            }
        }
    }

Y el problema que tengo es que cuando desde el cliente me pasan un JSON con el formato:

{
   "nombreItem": "test1",
   "descripcionItem": "description1",
   "CategoriaItem": {
      "id": "1"
   }
}

Clases:

Item 1..* --------->1 CategiriaItem
o
CategiriaItem 1------>1..* Item

Lo que me gustaría que pase (que no se bien como resolver aún) es que con ese JSON la asociación entre objetos se haga automáticamente por Doctrine. ¿Esto es posible?

El repositorio es:

https://github.com/jygsa/apiActivitiesNZ

Desde ya se agradecé cualquier ayuda brindada! :)