У меня очень странная проблема, когда я пытаюсь использовать var_dump (или print_r) объект Doctrine, мои ответы Apache с пустой пустой страницей (заголовок 200 OK). Я могу var_dump обычный php var, например:
$dummy = array("a" => 1, "b" =>2);
И работает нормально. Но я не могу использовать любой объект из любого класса Doctrine (например, результат из $connection->query() или экземпляр класса из моей объектной модели с Doctrine).
Кто-нибудь знает, почему это происходит?






У меня это иногда было, когда я пытался print_r() ссылаться на самодостаточный объект - он попадает в цикл и заканчивается нехваткой памяти. Возможно, именно это и происходит с вами.
Попробуйте увеличить лимит памяти (ini_set('memory_limit', '256M');) и посмотрите, поможет ли это.
Обновлено: я не думаю, что для этого есть реальное исправление - это внутренний PHP var_dump / print_r, который не ограничивает глубину рекурсии (или, по крайней мере, не делает это должным образом). Если вы установите расширение XDebug, оно может заменить встроенный var_dump версией, которая намного лучше справляется с рекурсией.
вы не получите полезного вывода, поэтому лучше используйте дамп доктрины \ Doctrine \ Common \ Util \ Debug :: dump (), который описан в другом ответе
Увеличение предела памяти никогда не следует рассматривать как хороший ответ. Это все равно что рекомендовать chmod 777.
Используйте метод toArray класса Doctrine_Record
var_dump($doctrine_record->toArray());
будет отображать только поля БД и избегать сброса полных внутренних компонентов Doctrine (которые содержат ссылку на себя / рекурсию, кстати)
Прокси-серверы с отложенной загрузкой всегда содержат экземпляр EntityManager Doctrine и все его зависимости.
Следовательно, var_dump, возможно, сбросит очень большую рекурсивную структуру, которую невозможно отобразить и прочитать. Вы должны использовать \Doctrine\Common\Util\Debug::dump(), чтобы ограничить дамп до уровня, удобочитаемого человеком. Обратите внимание, что глубина по умолчанию для этой функции установлена на 2 (это второй параметр).
Способом обойти это, помимо увеличения предела памяти, было бы использование xdebug и использование его xdebug.var_display_max_depth, чтобы выгружать только до определенной глубины всей этой рекурсии.
Вы можете использовать toArray, если уверены, что объект является экземпляром Doctrine_Collection. Xdebug не помогает с записями доктрин.
Я предлагаю реализовать настраиваемую рекурсивную функцию для печати объекта, которая при необходимости использует Doctrine_Record :: toArray ().
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
}
}
}
Некоторая рекурсивная функция для отладки с максимальными уровнями вложенности находится здесь
http://php.net/manual/en/function.var-dump.php
Посмотрите комментарии, ищите "рекурсию"
Это результат номер один в Google по запросу «doctrine var_dump». Пожалуйста, можете ли вы принять правильный ответ (stackoverflow.com/a/8646048/3408), а не ответ «увеличить лимит памяти», который на самом деле не решает проблему.