如何禁用dump()
功能,
什么时候在生产环境?
如果我忘记任何地方的转储功能它崩溃500错误
答案 0 :(得分:12)
您应该从生产代码中删除dump()
,它不一定要在那里。
但是as noted Cerad,因为当你在登记前忘记删除它们时会很烦人,你可以在{{1}的开头定义一个空的dump()
函数。 }}:
SRC \网络\ app.php
web/app.php
答案 1 :(得分:1)
3.3答案的新答案
现在在 Symfony 3.3 + 中,可以转储到prod环境。它不会出现在调试工具栏中,而是显示在页面的内容区域中(因此,如果您在控制器中执行此操作,它将位于顶部)。
这可以方便地调试dev和prod之间不做同样的事情,然后你可以在开发时保留调试代码,但只需确保在部署到生产环境之前就可以了注释掉任何转储。
答案 2 :(得分:0)
如果转储出现在日志中或HTML注释中会很好,这样对于那些生产环境中的某些东西工作不正常但你需要保持生产环境正常工作的情况会很有用正常。当然,您无法输出通常在转储中看到的漂亮HTML。我之前使用过这种技术,它对于调试生产问题或一些基本性能检查非常有用。
答案 3 :(得分:0)
对于 Symfony 4.1 + ,您可以通过以下方式修改index.php
:
if ($debug) {
umask(0000);
Debug::enable();
+ } else {
+ \Symfony\Component\VarDumper\VarDumper::setHandler(function($var) {});
+ }
然后dump()
在被调用时将不执行任何操作。如果需要,可以抛出异常或编写一些日志。
问题在于dump()
的内容将以开发人员模式进入Web调试工具栏,很容易被忽略。将此类代码部署到生产环境时,用户将看到内联dump()
!
答案 4 :(得分:-1)
Veve的答案很好,但我建议你尝试一下这个解决方案。
NB:这只是解锁你。 您应该从生产代码中移除dump()
!
在app/AppKernel.php
中添加:
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = [
new Symfony\Bundle\DebugBundle\DebugBundle(),
new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(),
# code ...
];
# ...
}