Symfony没有从配置/参数中读取环境变量,即使它们存在于正在运行的docker容器环境中。
如果没有使用.env文件,Symfony会一直抱怨。
如何让Symfony读取环境本身或名为.env以外的文件
更多信息:
当./symfony/dependency-injection/EnvVarProcessor.php:96试图从config/packages/doctrine.yaml加载文件以便在Doctrine中使用时,就会出现这个问题。
发布于 2019-03-29 20:46:11
1。从码头env变量读取env变量
如您所知,symfony只能读取由SYMFONY__前缀的env变量。
在DockerFile中:
ENV SYMFONY__MY_ENV_VAR myvalue // here it's not forced to prefix it by SYMFONY__例如,在配置虚拟主机的apache文件conf中:
SetEnv SYMFONY__MY_ENV_VAR ${SYMFONY__MY_ENV_VAR} // ${SYMFONY__MY_ENV_VAR} refer to the previous variable declared in docker file 在你的parameters.yml
parameters:
my_env_value: '%my.env_var%'Symfony将用两个下划线替换点,以查找不带关键字symfony__的env var。
示例:
SYMFONY__MY_ENV_VAR ==> %my_env_var%因此,在您的应用程序中,只需注入容器就可以获得这样的参数:
$this->container->getParameter('my_env_value');2.用另一个文件名覆盖.env文件
这里的重点是修改您的bootstrap.php文件,如下所示:
<?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';https://stackoverflow.com/questions/55424672
复制相似问题