Pregunta

Tengo un problema muy extraño, cuando intento var_dump (o print_r ) un Objeto de Doctrina, mis respuestas de Apache con una página en blanco vacía (encabezado de 200 OK) . Puedo var_dump una var php normal como:

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

Y funciona bien. Pero no puedo con ningún objeto de ninguna clase de Doctrine (como un resultado de $ connection- > query () , o una instancia de una clase de mi modelo de objetos con Doctrine).

¿Alguien sabe por qué sucede esto?

¿Fue útil?

Solución

He tenido eso a veces al intentar print_r () un objeto que hace referencia a sí mismo: entra en un bucle y se queda sin memoria. Posiblemente eso es lo que te está pasando.

Intente aumentar el límite de memoria ( ini_set ('memory_limit', '256M'); ) y vea si eso lo corrige.

Editar: no creo que haya una solución real para esto, es el var_dump / print_r interno de PHP que no limita la profundidad de la recursión (o no hazlo correctamente, al menos). Si instala la XDebug , esto puede reemplazar la var_dump incorporada con una versión que maneja la recursión mucho mejor.

Otros consejos

Los proxies de carga diferida siempre contienen una instancia del EntityManager de Doctrine y todas sus dependencias.

Por lo tanto, un var_dump posiblemente volcará una estructura recursiva muy grande que es imposible de renderizar y leer. Debe utilizar \ Doctrine \ Common \ Util \ Debug :: dump () para restringir el volcado a un nivel legible por humanos. Tenga en cuenta que la profundidad predeterminada para esta función se establece en 2 (es el segundo parámetro)

Utilice el método toArray de la clase Doctrine_Record

var_dump($doctrine_record->toArray());

solo mostrará los campos de la base de datos y evitará volcar las partes internas completas de Doctrine (que contiene la propia referencia / recursión por cierto)

Puede usar toArray si está seguro de que el objeto es una instancia de Doctrine_Collection. Xdebug no ayuda con los registros de doctrina.

La forma en que sugiero es implementar una función recursiva personalizada para imprimir un objeto, que use Doctrine_Record :: toArray () cuando sea necesario

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
       } 
   }   
}

Aquí se encuentran algunas funciones recursivas para depurar con los niveles máximos de anidamiento

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

Mire los comentarios, busque " recursión "

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top