我使用Symfony Flex完成了一个新的Symfony安装,新的骨架属于下一个Symfony 4目录结构。
我添加并配置了第一个第三方包:HWIOAuthBundle。此包用于使用两个秘密信息通过Twitter进行连接。
我在consumer_id
文件中声明了我的consumer_secret
和consumer_secret
。
hwi_oauth:
firewall_names: [secured_area]
resource_owners:
twitter:
type: twitter
client_id: XXXXXMyIdXXXXX
client_secret: XXXXXMyTopSecretKeyXXXXX
我的应用程序工作得很好。但是我不能在github上泄露我的秘密!
我想要一个像这样的hwi_oauth.yaml
文件:
hwi_oauth:
firewall_names: [secured_area]
resource_owners:
twitter:
type: twitter
client_id: '%twitter_consumer_id%'
client_secret: '%twitter_consumer_secret%'
我读过关于新的Symfony4最佳实践包的DotEnv。
使用环境变量,虽然远不是完美的,但与我们目前所做的工作相比,有许多好处。环境变量是一种更“标准”的方式来管理依赖于环境的设置(例如,不需要管理parameters.yml.dist )。
正如最佳实践中所建议的,我将这两行添加到.env
文件中:
TWITTER_CONSUMER_ID=XXXXXMyIdXXXXX
TWITTER_CONSUMER_SECRET=XXXXXMyTopSecretKeyXXXXX
但是我遇到了这个错误:
您已经请求了一个不存在的参数"twitter_consumer_id“。
我试了一下%kernel.twitter_consumer_id%
,%env.twitter_consumer_id%
,%env(TWITTER_CONSUMER_ID)%
,但没有取得更多的成功。
最后一个测试是返回以下错误消息:
在模板的呈现过程中抛出了一个异常(“没有找到环境变量:”TWITTER_CONSUMER_ID“)。
如何在像hwi_oauth.yaml
**?**这样的参数文件中检索ENV变量?
发布于 2017-08-25 12:25:35
您需要在引导过程中加载.env
文件,以便这些环境变量可用:
(new DotEnv())->load(__DIR__ . '/../.env');
您应该计划将环境变量中的秘密密钥放在开发、暂存和生产中。不过,这要看你怎么做了。在开发和暂存过程中,您可能使用.env
文件,而在生产中则使用Apache进行注入。
就我个人而言,我总是使用.env
文件,并且在我的存储库中保留一个空白文件。通过这种方式部署起来非常简单,而且没有任何特殊情况。
如果只想在特定环境中使用.env
文件,则可以:
if (in_array(getenv('APP_ENV'), [ 'dev', 'test' ])) {
(new DotEnv())->load(__DIR__ . '/../.env');
}
发布于 2017-08-25 13:01:56
对于test
环境,我建议还创建一个bootstrap.php
脚本来覆盖.env
参数:
tests/bootstrap.php:
<?php
use Symfony\Component\Dotenv\Dotenv;
require_once __DIR__.'/../vendor/autoload.php';
$dotEnv = new Dotenv();
$dotEnv->load(__DIR__.'/../.env');
$dotEnv->populate([
'APP_ENV' => 'test',
'DATABASE_URL' => '...'
// ...
]);
phpunit.xml.dist:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="tests/bootstrap.php" <--- set
...
>
...
</phpunit>
https://stackoverflow.com/questions/45888507
复制相似问题