首页 > 解决方案 > symfony/debug-bundle 配置中的 dump_destination

问题描述

在我的团队中,我们使用 SF4 并使用 .env.dist(以及 .env)进行开发人员特定的配置。当我们开发时,我们发现symfony/var-dumper非常有用,但是有些开发者喜欢在浏览器中转储,有些在控制台中使用 symfony/debug-bundle 附带的 server:dump 命令。从远程拉出后一遍又一遍地注释掉/取消注释debug.dump_destination键是非常烦人的,或者当当前远程 HEAD 恰好也编辑了这个文件时担心冲突。

我尽我所能进行调试,问题出在此处: 在构建容器之前Symfony\Bundle\DebugBundle\DependencyInjection\DebugExtension::load()检查0 === strpos($config['dump_destination'], 'tcp://')环境变量并没有解决,然后假设WHATEVER="tcp://%env(VAR_DUMPER_SERVER)%"在我的.env文件中并debug.dump_destination: '%env(resolve:WHATEVER)%'导致错误(在检查时 dump_destination 是env_93f4ff143f62ce8d_resolve_WHATEVER_e29a13ca55ef040f58272adff34dd9a4) 一切都坏了。作为旁注,当我不使用环境变量而只是设置时 parameters.whatever: "tcp://%env(VAR_DUMPER_SERVER)%"debug.dump_destination: %whatever%一切都很好。当然,我可以创建新的 parameters.dist.yaml 文件和 parameters.yaml ,后者将被添加到 .gitignore 但我想将每个开发人员的特定信息保留在一个文件中,即 .env 。

总而言之,我该怎么做才能让一个开发人员和另一个开发人员的密钥debug.dump_destination相等?tcp://%env(VAR_DUMPER_SERVER)%null~

解决方案

按照 M. Kebza 的回答,这是我想出的解决方案:

.env

DUMP_SERVER=null # or DUMP_SERVER=tcp://%env(VAR_DUMPER_SERVER)%

内核.php

$DUMP_SERVER = getenv('DUMP_SERVER');
if (strtolower($DUMP_SERVER) === 'null' || $DUMP_SERVER === '~') {
    $DUMP_SERVER = null;
}
$container->setParameter('DUMP_SERVER', $DUMP_SERVER);

调试.yaml

debug.dump_destination: "%DUMP_SERVER%"

bin/console cache:clear在.env文件中每次 DUMP_SERVER 变量更改后都需要。

标签: symfonysymfony4var-dump

解决方案


如何解决这个问题的另一个想法:

  • debug.dump_destination在环境中为每个开发人员设置默认值并使用 ENV 变量来设置他的首选解决方案
  • 例如,在您Kernel.php的方法中configureContainer检查本地文件是否存在,local.yaml这可用于覆盖特定配置,在 git 中应忽略此文件。

推荐阅读