我发现自己处于这样一种情况,我需要处理一些环境变量,这些变量传递给一些类型提示的类方法和抱怨的构造函数,因为他们期望一个整数,但是它们会收到一个字符串,因为env vars总是字符串,无论其内容如何。
我希望尽可能保持严格的类型提示,但目前的解决方案(例如Symfony DotEnv)似乎甚至没有考虑进行任何类型转换的可能性。
你会如何解决这个问题?正如我所说的,我想避免放松类型提示,但是env vars处理的当前状态似乎没有任何建议,只是字符串是“正确的”。
我倾向于使用某种形式的代理类,它理解它将获得一个字符串,但必须提供输出为整数等。
如果有许多环境变量进入类的构造(es),通过某种形式的value-object(也可以将它们转换为正确的类型)将它们放入,也可以简化参数列表,并使对于发生的事情,它更加明显。
经过一些修补和研究后,我和一位同事提出了一个基于parameter.php文件的解决方案(而不是参数.yml),我们可以在这里得到并按如下方式对变量进行类型转换:
$container->setParameter('foo.bar', (int) getenv('FOO_BAR'));
事实证明,Symfony团队也出现了同样的需求:他们通过允许DIC的Yaml文件中的类型转换解决了这个问题,如以下文章中所述> https://symfony.com/blog/new-in-symfony-3-4-advanced-environment-variables