symfony2 doctrine2中的var_dump数据过多


100

我有大约40个实体和许多双向关系。每当我使用var_dump($ user)或任何实体时,我的浏览器就会加载太多的数组和变量数据,然后它就会崩溃。

我想出什么问题。

数据已正确插入。我可以在生产中引起问题吗?


我们在说什么浏览器?
马达拉的鬼魂

3
您在使用xdebug吗?如果没有,请考虑使用它,而不是使用var_dump,而仅将步调试器与Ecplipse,Netbeans或PHPStorm等IDE结合使用。所有这些将很好地显示变量数据。
哈克(Hakre)2012年

“崩溃”是什么意思-浏览器应用程序(或选项卡)关闭了,还是没有显示结果,或者页面中断了?
Yuriy 2012年

我的浏览器显示了很长的变量数据页面,其中包含我的所有数据以及所有内容。看起来就像永无休止的循环。我试过botf firefox和chrome。如果我尝试任何其他没有关系的课程,那么它可以正常工作,但是由于许多关系,它会使计算机冻结。我不得不结束任务
Mirage

我的课程很简单,浏览器也崩溃了。我讨厌所有这些迟钝的默认设置。
ChocoDeveloper 2012年

Answers:


221

Doctrine Common提供的调试方法dump()替换var_dump()

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

它适用于单个对象和Doctrine集合,并且应防止浏览器显示您遇到的问题。


5
您还可以dump()使用MaxDepthdump()第二个参数是MaxDepth
MB Kakadiya

3
如果您希望将调试输出输出到php错误日志中,请使用以下命令:error_log(print_r(\Doctrine\Common\Util\Debug::export($variable, $depth),1)); 每次键入都很麻烦,但是您可以轻松为其创建一个宏。
Andrea Sprega 2014年

这个功能很有帮助!也使我免于浏览器崩溃。

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

get_object_vars()也改善了可视化效果。

echo "<pre>";
\Doctrine\Common\Util\Debug::dump(get_object_vars($user));

2

使用Symfony 2.6,您现在可以只在控制器中使用dump($ var),而在树枝中使用{{dump(var)}}。

确保将其添加到array('dev','test')部分的AppKernal.php文件中。

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.