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

时间:2018-05-14 17:21:13

标签: symfony environment-variables 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,其中包含以下消息:

  

找不到环境变量:“GOOGLE_DEVELOPER_KEY”。

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

parameters:
    google.developer.key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

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

我清除了dev缓存,重新启动了Web服务器,阅读了相关的Symfony文档(我认为),但没有运气。我想我错过了一步,但我无法弄清楚会是什么。任何提示都将不胜感激。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

请参阅:more

您可以使用构造中的关键developer_key将该开发人员密钥传递给数组。