在Symfony2 Doctrine2中,使用var_dump输出过多数据

108

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

我想知道问题出在哪里。

数据插入功能正常。这会在生产环境中造成问题吗?


3
你是否在使用xdebug?如果没有,请考虑使用它,而不是仅使用var_dump。可以利用像Eclipse、Netbeans或PHPStorm这样的IDE,使用步骤调试器来显示变量数据。这些工具都可以很好地展示变量数据。 - hakre
“崩溃”是什么意思 - 浏览器应用程序(或选项卡)关闭了吗?还是没有显示结果,或者页面被中断了? - Yuriy
我的浏览器显示了非常长的变量数据页面,包括所有实体和其他内容。看起来像是进入了无限循环。我尝试了Firefox和Chrome,但都没有用。如果我尝试任何与之无关的类,则可以正常工作,但是对于许多关系,它会冻结计算机。我不得不结束任务。 - Mirage
这也适用于ZF2! - NiMeDia
xdebug 绝对是你需要的,没错! - barbieswimcrew
显示剩余2条评论
9个回答

233

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

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

它适用于单个对象和Doctrine集合,并且应该可以防止浏览器显示问题。

6
您也可以使用dump()MaxDepth一起使用,在dump()的第二个参数中设置MaxDepth - M.B Kakadiya
4
如果您希望将调试输出记录到PHP错误日志中,请使用以下内容:error_log(print_r(\Doctrine\Common\Util\Debug::export($variable, $depth),1));这个命令每次都输入比较麻烦,但是您可以轻松地为其创建一个宏。 - Andrea Sprega
这个函数非常有帮助!不仅让我免于浏览器崩溃的困扰。 - Ren
这个类已经被弃用 - 你应该使用Symfony var dumper代替。 - Mathias Bader

21

格式良好:

echo '<pre>';
\Doctrine\Common\Util\Debug::dump($user, $recurciveLevelToDisplay);
echo '</pre>';

5

一个简单易懂的例子。

var_dump(serialize($Object));

5

Symfony < 2.6

您可以使用\Doctrine\Common\Util\Debug::dump($variable, $depth);,它会显示Doctrine输出的内容而不包含代理信息。

Symfony > 2.6

如果您正在使用Symfony 2.6或更高版本,则强烈建议使用dump()。 它显示格式良好且着色的输出,并且您可以动态展开/隐藏行。 enter image description here


4
问题在于双向关系中,两个实体彼此链接,因此在显示entity1 var_dump时,还必须打印entity2的所有属性,其中包括entity1本身,从而导致循环。

这是唯一一个解释为什么会发生的答案。 - user2342558

2
使用 dump($user) ,您可以在 Symfony Profiler 中看到完美的结果!祝好运。

2
get_object_vars()函数可以提高可视性。
echo "<pre>";
\Doctrine\Common\Util\Debug::dump(get_object_vars($user));

2

在Symfony 2.6中,您现在可以在控制器中使用dump($var),并在twig中使用{{ dump(var) }}。

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

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

1

只需使用echo serialize($user);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接