Слишком много данных с var_dump в symfony2 doctrine2

100

У меня около 40 сущностей и много двунаправленных отношений. Всякий раз, когда я использую var_dump ($ user) или какой-либо объект, мой браузер загружает слишком много данных массивов и переменных, тогда он просто падает.

Я хочу понять, в чем проблема.

Данные вставляются нормально. Могу ли я вызвать проблемы в производстве?

Мираж
источник
О каком браузере мы говорим?
Призрак Мадары
3
Вы используете xdebug? Если нет, подумайте о том, чтобы использовать его, а вместо var_dump просто используйте пошаговый отладчик с IDE, например Ecplipse, Netbeans или PHPStorm. Все это будет красиво отображать данные переменных.
hakre
Что вы имеете в виду под "сбоем" - приложение браузера (или вкладка) закрывается, не отображает никаких результатов, или страница прерывается?
Юрий
мой браузер отображает очень длинную страницу данных переменных со всеми моими объектами и всем прочим. похоже, что он идет в бесконечный цикл. Я попробовал Botf Firefox и Chrome. если я попробую любой другой класс, который не имеет отношения, он работает нормально, но при многих отношениях он замораживает компьютер. я должен был завершить это задание
Mirage
У меня простой класс, и мой браузер тоже разбился. Я ненавижу все эти отсталые настройки по умолчанию.
ChocoDeveloper 01

Ответы:

221

Замените var_dump () методом отладки dump (), предоставленным Doctrine Common .

\Doctrine\Common\Util\Debug::dump($user);

Он работает для отдельных объектов и коллекций Doctrine и должен предотвращать проблемы с отображением в браузере, которые у вас возникают.

mgiagnoni
источник
5
Вы можете также dump()с MaxDepth , во dump()втором аргументе MaxDepth .
MB Kakadiya 02
3
Если вы предпочитаете, чтобы результаты отладки записывались в журнал ошибок php, используйте следующее: error_log(print_r(\Doctrine\Common\Util\Debug::export($variable, $depth),1)); вводить каждый раз довольно громоздко, но вы можете легко создать для него макрос.
Андреа Спрега
Эта функция очень полезна! Спас меня и от сбоев браузера.
Ren
20

хорошо отформатирован:

echo '<pre>';
\Doctrine\Common\Util\Debug::dump($user, $recurciveLevelToDisplay);
echo '</pre>';
Bouchehboun Saad
источник
5

Простой и легкий пример.

var_dump(serialize($Object));
Кентаро Окоучи
источник
4

Проблема в том, что в двунаправленных отношениях обе сущности связаны друг с другом, поэтому при отображении entity1 var_dump также придется распечатать все свойства entity2, включая сам entity1, дающий вам цикл.

Rad80
источник
Это единственный ответ, который объясняет, ПОЧЕМУ это происходит.
user2342558
4

Symfony <2.6

Вы можете использовать \Doctrine\Common\Util\Debug::dump($variable, $depth);его для отображения вывода доктрины без информации прокси.

Symfony> 2.6

Если вы используете Symfony 2.6 или выше, я настоятельно рекомендую вам использовать dump(). Он показывает хорошо оформленный и цветной вывод, и вы можете динамически расширять / скрывать строки. введите описание изображения здесь

перейти к
источник
2

Get_object_vars () также улучшает визуализацию.

echo "<pre>";
\Doctrine\Common\Util\Debug::dump(get_object_vars($user));
Веллингтон Лориндо
источник
2

В Symfony 2.6 теперь вы можете просто использовать dump ($ var) в вашем контроллере и {{dump (var)}} в twig.

Обязательно добавьте это в свой файл AppKernal.php в раздел array ('dev', 'test').

$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
J-кто
источник
2

используйте dump ($ user), и вы увидите отличный результат в Symfony Profiler! удачи

Виталий Пугач
источник
1

Просто используйте echo serialize ($ user);

AlexM
источник