首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让Symfony从.env以外的其他文件读取env变量?

如何让Symfony从.env以外的其他文件读取env变量?
EN

Stack Overflow用户
提问于 2019-03-29 19:54:07
回答 1查看 3.2K关注 0票数 0

Symfony没有从配置/参数中读取环境变量,即使它们存在于正在运行的docker容器环境中。

如果没有使用.env文件,Symfony会一直抱怨。

如何让Symfony读取环境本身或名为.env以外的文件

更多信息:

当./symfony/dependency-injection/EnvVarProcessor.php:96试图从config/packages/doctrine.yaml加载文件以便在Doctrine中使用时,就会出现这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-29 20:46:11

1。从码头env变量读取env变量

如您所知,symfony只能读取由SYMFONY__前缀的env变量。

在DockerFile中:

代码语言:javascript
复制
ENV SYMFONY__MY_ENV_VAR myvalue // here  it's not forced to prefix it by SYMFONY__

例如,在配置虚拟主机的apache文件conf中:

代码语言:javascript
复制
 SetEnv SYMFONY__MY_ENV_VAR ${SYMFONY__MY_ENV_VAR} // ${SYMFONY__MY_ENV_VAR} refer to the previous variable declared in docker file 

在你的parameters.yml

代码语言:javascript
复制
  parameters: 
     my_env_value: '%my.env_var%'

Symfony将用两个下划线替换点,以查找不带关键字symfony__的env var。

示例:

代码语言:javascript
复制
SYMFONY__MY_ENV_VAR  ==> %my_env_var%

因此,在您的应用程序中,只需注入容器就可以获得这样的参数:

代码语言:javascript
复制
$this->container->getParameter('my_env_value');

2.用另一个文件名覆盖.env文件

这里的重点是修改您的bootstrap.php文件,如下所示:

代码语言:javascript
复制
<?php
use Symfony\Component\Dotenv\Dotenv;
require dirname(__DIR__).'/vendor/autoload.php';
// Load cached env vars if the .env.local.php file exists
// Run "composer dump-env prod" to create it (requires symfony/flex >=1.2)
if (is_array($env = @include dirname(__DIR__).'/.env.local.php')) {
    $_SERVER += $env;
    $_ENV += $env;
} elseif (!class_exists(Dotenv::class)) {
    throw new RuntimeException('Please run "composer require symfony/dotenv" to load the ".env" files configuring the application.');
} else {
    // load all the .env files
    (new Dotenv())->loadEnv(dirname(__DIR__).'/.env'); // just make the file name that you want instead of .env
}
$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? null) ?: 'dev';
$_SERVER['APP_DEBUG'] = $_SERVER['APP_DEBUG'] ?? $_ENV['APP_DEBUG'] ?? 'prod' !== $_SERVER['APP_ENV'];
$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = (int) $_SERVER['APP_DEBUG'] || filter_var($_SERVER['APP_DEBUG'], FILTER_VALIDATE_BOOLEAN) ? '1' : '0';
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55424672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档