Слишком много данных с 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 и должен предотвращать проблемы с отображением в браузере, которые у вас возникают.


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>';


4

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


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

4

Symfony <2.6

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

Symfony> 2.6

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



2

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

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

$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.