helper/ApiRestHelper/JsonHelper.php
protected function json_encode_recursion_internal($object, $recursionLevel = 1, $options = 0, $objects, $ocurrencias){
        $pos= array_search($object, $objects);
        $repeticiones= 1;
        if($pos !== FALSE){
            $ocurrencias[$pos]++;
            $repeticiones= $ocurrencias[$pos];
        }else{
            $objects[]= $object;
            $ocurrencias[]= 1;
        }
        if($repeticiones > $recursionLevel){            
            return FALSE;
        }else{
            if(method_exists($object, 'jsonSerialize')){                
                $vars= $object->jsonSerialize();
                foreach ($vars as $key => &$var) {
                    if(is_object($var)){
                        $rta= $this->json_encode_recursion_internal($var, $recursionLevel, $options, $objects, $ocurrencias);
                        if($rta !== FALSE){
                            $var= $rta;
                        }else{
                            unset($var);
                            unset($vars[$key]);
                        }
                    }else if(is_array($var) || $var instanceof \Traversable){
                        foreach ($var as &$item) {
                            $item= $this->json_encode_recursion_internal($item, $recursionLevel, $options, $objects, $ocurrencias);
                        }
                        //$var= json_encode_recursion_internal($var, $recursionLevel, $options, $objects, $ocurrencias);
                    }
                }
                return $vars;
            }else{
                return $object;
            }
        }    
    }
protected function json_encode_recursion_internal($object, $recursionLevel = 1, $options = 0, $objects, $ocurrencias){
        $pos= array_search($object, $objects);
        $repeticiones= 1;
        if($pos !== FALSE){
            $ocurrencias[$pos]++;
            $repeticiones= $ocurrencias[$pos];
        }else{
            $objects[]= $object;
            $ocurrencias[]= 1;
        }
        if($repeticiones > $recursionLevel){            
            return FALSE;
        }else{
            if(method_exists($object, 'jsonSerialize')){                
                $vars= $object->jsonSerialize();
                foreach ($vars as $key => &$var) {
                    if(is_object($var)){
                        $rta= $this->json_encode_recursion_internal($var, $recursionLevel, $options, $objects, $ocurrencias);
                        if($rta !== FALSE){
                            $var= $rta;
                        }else{
                            unset($var);
                            unset($vars[$key]);
                        }
                    }else if(is_array($var) || $var instanceof \Traversable){
                        foreach ($var as &$item) {
                            $item= $this->json_encode_recursion_internal($item, $recursionLevel, $options, $objects, $ocurrencias);
                        }
                        //$var= json_encode_recursion_internal($var, $recursionLevel, $options, $objects, $ocurrencias);
                    }
                }
                return $vars;
            }else{
                return $object;
            }
        }    
    }
protected function json_encode_recursion_internal ( $ object , $ recursionLevel = 1 , $ options = 0 , $ objects , $ ocurrencias ) { $ pos = array_search ( $ object , $ objects ) ; $ repeticiones = 1 ; if ( $ pos !== FALSE ) { $ ocurrencias [ $ pos ] ++ ; $ repeticiones = $ ocurrencias [ $ pos ] ; } else { $ objects [ ] = $ object ; $ ocurrencias [ ] = 1 ; } if ( $ repeticiones > $ recursionLevel ) { return FALSE ; } else { if ( method_exists ( $ object , 'jsonSerialize' ) ) { $ vars = $ object -> jsonSerialize ( ) ; foreach ( $ vars as $ key => & $ var ) { if ( is_object ( $ var ) ) { $ rta = $ this -> json_encode_recursion_internal ( $ var , $ recursionLevel , $ options , $ objects , $ ocurrencias ) ; if ( $ rta !== FALSE ) { $ var = $ rta ; } else { unset ( $ var ) ; unset ( $ vars [ $ key ] ) ; } } else if ( is_array ( $ var ) || $ var instanceof \ Traversable ) { foreach ( $ var as & $ item ) { $ item = $ this -> json_encode_recursion_internal ( $ item , $ recursionLevel , $ options , $ objects , $ ocurrencias ) ; } //$var= json_encode_recursion_internal($var, $recursionLevel, $options, $objects, $ocurrencias); } } return $ vars ; } else { return $ object ; } } }
Este metodo es privado y realiza el pasaje de un objeto Doctrine a json.
Para esto indicamos el nivel de profundidad que se va a ingresar en el objeto y los objetos no cargados hasta
el momento solo se mapearan su id.
@param Object $object
@param int $recursionLevel
@param int $options
@param mixed $objects
@param int $ocurrencias
@return mixed
Este metodo es privado y realiza el pasaje de un objeto Doctrine a json . Para esto indicamos el nivel de profundidad que se va a ingresar en el objeto y los objetos no cargados hasta el momento solo se mapearan su id .