From 8f75565277c4447c7fb784f1f048d8a102e82f74 Mon Sep 17 00:00:00 2001 From: guilhermeblanco Date: Sun, 6 Sep 2009 18:23:57 +0000 Subject: [PATCH] [2.0] Added support to dump Entities even when xdebug is not laoded --- lib/Doctrine/Common/Util/Debug.php | 59 ++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 3 deletions(-) diff --git a/lib/Doctrine/Common/Util/Debug.php b/lib/Doctrine/Common/Util/Debug.php index 3491f1d3d..9dc536de6 100644 --- a/lib/Doctrine/Common/Util/Debug.php +++ b/lib/Doctrine/Common/Util/Debug.php @@ -54,6 +54,26 @@ final class Debug public static function dump($var, $maxDepth = 2) { ini_set('html_errors', 'On'); + + if (extension_loaded('xdebug')) { + $dump = self::_dumpWithXDebug($var, $maxDepth); + } else { + $dump = self::_dumpWithReflection($var, $maxDepth); + + ob_start(); + var_dump($dump); + $dump = ob_get_contents(); + ob_end_clean(); + } + + echo strip_tags(html_entity_decode($dump)); + + ini_set('html_errors', 'Off'); + } + + + private static function _dumpWithXDebug($var, $maxDepth) + { ini_set('xdebug.var_display_max_depth', $maxDepth); ob_start(); @@ -61,8 +81,41 @@ final class Debug $dump = ob_get_contents(); ob_end_clean(); - echo strip_tags(html_entity_decode($dump)); - - ini_set('html_errors', 'Off'); + return $dump; + } + + private static function _dumpWithReflection($var, $maxDepth) + { + $disallowedDumpableClasses = array( + 'Doctrine\ORM\EntityManager', + ); + + $reflClass = new \ReflectionClass(get_class($var)); + $arr = array(); + + foreach ($reflClass->getProperties() as $reflProperty) { + $reflProperty->setAccessible(true); + $value = $reflProperty->getValue($var); + + if ($maxDepth) { + if (is_object($value)) { + if (in_array('Doctrine\Common\Collections\Collection', class_implements($value))) { + $value = $value->toArray(); + + foreach ($value as $k => $v) { + $value[$k] = self::_dumpWithReflection($v, $maxDepth - 1); + } + } else if (in_array(get_class($value), $disallowedDumpableClasses)) { + $value = get_class($value); + } + } + } else { + $value = is_object($value) ? get_class($value) : $value; + } + + $arr[$reflProperty->getName()] = $value; + } + + return $arr; } }