如何在 Symfony 3.4 的控制器中获取环境参数?

How do I get an environment parameter in a controller In Symfony 3.4?

在 Symfony 3.4 应用程序的 dev 环境中,我试图将凭据存储为环境变量。我无法让它工作,我无法弄清楚缺少什么。这是我的:

app\config\.env 中,我定义了一个 API 键,如下所示:

GOOGLE_DEVELOPER_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

app\config\services.yml我有:

parameters:
    google.developer.key: "%env(GOOGLE_DEVELOPER_KEY)%"

在我的一个控制器中,我想将此参数传递给一个对象,如下所示:

    $client = new \Google_Client();
    $client->setDeveloperKey($this->getParameter('google.developer.key'));

对我来说,该设置看起来不错,但是当我尝试 运行 它时,我收到 EnvNotFoundException 并显示以下消息:

Environment variable not found: "GOOGLE_DEVELOPER_KEY".

当我直接将密钥放入 app\config\services.yml 时,它工作正常:

parameters:
    google.developer.key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

(但由于种种原因,这不是我想要的。)

我清除了 dev 缓存,重新启动了网络服务器,阅读了相关的 Symfony 文档(我认为),但没有成功。我想我错过了一步,但我不知道那是什么。任何提示将不胜感激。

symphony v3.4 documentation on Environment Variables 建议使用您的网络服务器配置环境变量。

我无法对此进行测试,因为我安装的是 Symfony v4,并且使用 /.env 文件来配置环境变量。

希望这在某种程度上有所帮助。

Symfony 3.4 不会自动加载 .env 文件。您必须修改 app_dev.php 才能加载文件:

use Symfony\Component\Dotenv\Dotenv;
...
$dotenv = new Dotenv();
$dotenv->load(__DIR__.'/../app/config/.env');

为什么在控制器中初始化 Google_Client 而不是使用服务容器?

参见:https://symfony.com/doc/3.4/service_container.html

您可以在构造中使用键 developer_key 将开发者密钥传递到数组中。