【发布时间】: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 变量更改后都需要。
【问题讨论】: