2017-04-27 104 views
2

我发现自己处于需要处理一些环境变量的情况,这些环境变量传递给某些类型暗示类方法和构造函数,这些方法和构造函数抱怨,因为它们期望一个整数,但他们收到字符串,因为env变量总是字符串,不管它们的内容。环境变量类型铸造

我想尽可能保持严格的类型提示,但目前的解决方案(如Symfony DotEnv)似乎甚至没有考虑过进行任何类型转换的可能性。

你将如何去解决这个问题?正如我所说的,我想避免放宽班级类型暗示,但目前的环境变量处理似乎没有提示任何内容,但字符串是“正确的”。

回答

0

我倾向于使用某种形式的代理类,它理解它会得到一个字符串,但必须提供输出为整数等。

如果有许多环境变量进入类的构造中,通过某种形式的值对象(它们也会将它们转换为适当的类型),也可以简化参数列表,并使它对于发生的事情更加明显。

0

经过一番修改和研究之后,我和一个同事想出了一个基于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

在解决问题