【问题标题】:dump_destination in symfony/debug-bundle configsymfony/debug-bundle 配置中的 dump_destination
【发布时间】:2018-08-07 20:11:40
【问题描述】:

在我的团队中,我们使用 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://') 和 as 在构建容器之前不会解析环境变量,然后在我的 .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)%

内核.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 变量更改后都需要。

【问题讨论】:

    标签: symfony symfony4 var-dump


    【解决方案1】:

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

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

    【讨论】:

    • 1. 不起作用。使用%env(WHATEVER)% 时,在完整容器编译之前按原样2. 检查了这个,效果很好。但是,在 .env 中没有看到更改此变量,需要bin/console cache:clear
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多