SYMFONY DEV to PROD: \DebugBundle not included by AppKernel.php in PROD case creates issue with all existing dump(...) 函数在代码中

SYMFONY DEV to PROD: \DebugBundle not included by AppKernel.php in PROD case creates issue with all existing dump(...) functions in the code

在 SYMFONY3 中,我在代码中大量使用 The VarDumper Component that works with the DebugBundle Configuration ("debug") 的 dump(...) 函数。

一旦您转到生产设置,代码中的所有 dump(...) 都会成为问题并引发错误,因为在 [project]\app\AppKernel.php 中设置看起来像那:

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = [...];

        if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
            $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
            ...     
        }

        return $bundles;
    }

.... other functions...
}

Symfony\Bundle\DebugBundle\DebugBundle() 仅适用于 'dev' 环境。我可以将它添加到 'prod' 环境中,但出于明显的性能原因,它并不意味着那样。

表示必须删除(或注释)代码中的所有dump(...)。我有很多,所以我想知道是否有关于该特定主题的建议,可以顺利地从 "dev" 移动到 "prod" 。

显然,最好的方法是删除所有转储,但这里有一个您可以尝试的解决方法。 您应该创建一个什么都不做的 PHP closure。这样,对转储函数的调用将完全没有效果。 我还没有尝试过,所以如果您有任何问题,请告诉我。

// web/app.php
function dump() {
    return;
}

prod 环境中,您必须完全删除所有 dump() 调用。这就是为什么 Symfony 仅在 dev 环境中使用 dump 函数,而不允许您在 prod 环境中使用该函数编写 运行 代码。

此外,在代码周围使用 dump() 语句也不是很好。您可以使用这个有用的函数测试您的代码的某些部分,但是当您知道您的代码运行良好时,您可以立即删除 dump() 语句。而且你以后不会有任何问题。

您可以使用任何 IDE 将所有出现的 dump() 替换为空字符串,因此您将在 prod 环境中获得工作代码。