dump_destination 在 symfony/debug-bundle 配置中

dump_destination in symfony/debug-bundle config

在我的团队中,我们使用 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://') 并作为 在构建容器之前,环境变量不会被解析,然后在我的 .env 文件中有 WHATEVER="tcp://%env(VAR_DUMPER_SERVER)%" 并且 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)%

Kernel.php

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

debug.yaml

debug.dump_destination: "%DUMP_SERVER%"

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

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

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