Ale*_*ant 9 php environment-variables symfony symfony-flex symfony4
我使用Symfony Flex进行了新的Symfony安装,新的骨架属于下一个Symfony 4目录结构.
我添加并配置了第一个第三方软件包:HWIOAuthBundle.该捆绑包用于通过Twitter使用两个秘密信息进行连接.
consumer_id我consumer_secret在config/packages/hwi_oauth.yaml文件中声明我和我的.
hwi_oauth:
firewall_names: [secured_area]
resource_owners:
twitter:
type: twitter
client_id: XXXXXMyIdXXXXX
client_secret: XXXXXMyTopSecretKeyXXXXX
Run Code Online (Sandbox Code Playgroud)
我的申请工作正常.但我无法在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%'
Run Code Online (Sandbox Code Playgroud)
我阅读了有关新DotEnv包的Symfony4最佳实践.
使用环境变量虽然远非完美,但与我们目前的工作相比有很多好处.环境变量是管理依赖于环境的设置的更"标准"方式(例如,不需要管理parameters.yml.dist).
正如最佳实践中所建议的那样,我将这两行附加到.env文件:
TWITTER_CONSUMER_ID=XXXXXMyIdXXXXX
TWITTER_CONSUMER_SECRET=XXXXXMyTopSecretKeyXXXXX
Run Code Online (Sandbox Code Playgroud)
但是我遇到了这个错误:
您已请求不存在的参数"twitter_consumer_id".
我试着用%kernel.twitter_consumer_id%,%env.twitter_consumer_id%,%env(TWITTER_CONSUMER_ID)%没有更多的成功.
最后一个测试是返回此错误消息:
在渲染模板期间抛出了异常("未找到环境变量:"TWITTER_CONSUMER_ID".").
如何在参数文件中检索我的ENV变量hwi_oauth.yaml?
您需要.env在引导过程中加载文件,以便使这些环境变量可用:
(new DotEnv())->load(__DIR__ . '/../.env');
Run Code Online (Sandbox Code Playgroud)
您应该计划在开发,登台和生产中将密钥放在环境变量中.但是,你如何做到这一点取决于.在开发和暂存中,也许你使用.env文件,而在生产中你使用Apache注入.
就个人而言,我总是使用.env文件,并在我的存储库中保留一个空白文件.这样,它的部署非常简单,并且没有任何特殊情况.
如果您只想.env在特定环境中使用文件,则可以执行以下操作:
if (in_array(getenv('APP_ENV'), [ 'dev', 'test' ])) {
(new DotEnv())->load(__DIR__ . '/../.env');
}
Run Code Online (Sandbox Code Playgroud)
对于test环境,我建议还创建一个bootstrap.php脚本来覆盖.env参数:
测试/ 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' => '...'
// ...
]);
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1417 次 |
| 最近记录: |