Domanda

Ho un problema molto strano, quando provo a var_dump (o print_r ) un oggetto Doctrine, il mio Apache risponde con una pagina vuota vuota (200 OK header) . Posso var_dump un normale var php come:

$dummy = array("a" => 1, "b" =>2);

E funziona benissimo. Ma non posso con nessun oggetto di qualsiasi classe Doctrine, (come un risultato di $ connection- > query () , o un'istanza di una classe del mio modello a oggetti con Doctrine).

Qualcuno sa perché questo accada?

È stato utile?

Soluzione

Qualche volta l'ho provato quando ho provato a print_r () un oggetto autoreferenziale - entra in un ciclo ed esaurisce la memoria. Forse è quello che ti sta succedendo.

Prova ad aumentare il limite di memoria ( ini_set ('memory_limit', '256M'); ) e vedi se questo lo risolve.

Modifica: non credo che ci sia una soluzione effettiva per questo - è il var_dump / print_r interno di PHP che non limita la profondità della ricorsione (o no fallo correttamente, almeno). Se si installa l'estensione XDebug , è possibile sostituire l'estensione var_dump con una versione che gestisce molto meglio la ricorsione.

Altri suggerimenti

I proxy di caricamento lento contengono sempre un'istanza di EntityManager di Doctrine e tutte le sue dipendenze.

Pertanto un var_dump probabilmente scaricherà una struttura ricorsiva molto grande che è impossibile renderizzare e leggere. Devi usare \ Doctrine \ Common \ Util \ Debug :: dump () per limitare il dumping a un livello leggibile dall'uomo. Si noti che la profondità predefinita per questa funzione è impostata su 2 (è il secondo parametro)

Utilizza il metodo toArray della classe Doctrine_Record

var_dump($doctrine_record->toArray());

visualizzerà solo i campi DB ed eviterà di scaricare l'intero interno di Doctrine (che contiene autoreferenziazione / ricorsione tra l'altro)

Puoi usare toArray se sei sicuro che l'oggetto sia un'istanza di Doctrine_Collection. Xdebug non aiuta con i record di dottrina.

Il modo in cui suggerisco è l'implementazione di una funzione ricorsiva personalizzata per stampare l'oggetto, che utilizza Doctrine_Record :: toArray () quando necessario

function var_dump_improved()
{
   foreach (func_get_args() as $arg) {
       if ($args instanceof Doctrine_Collection) {
          print_r($arg);
       } else if ( $arg instanceof Traversable || is_array($arg) ) {
          // do a foreach and recall var_dump_improved on subelements
       } else if (...) {
          // other types
       } 
   }   
}

Alcune funzioni ricorsive per il debug con livelli massimi di annidamento sono qui

http://php.net/manual/en/function.var- dump.php

Guarda i commenti, cerca " ricorsione "

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top