mirror of
https://github.com/symfony/recipes.git
synced 2026-09-12 23:56:25 +03:00
Allow to override .env files per env
This commit is contained in:
@@ -6,6 +6,7 @@ use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
|
||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||
use Symfony\Component\Config\Resource\FileResource;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\Dotenv\Dotenv;
|
||||
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
|
||||
use Symfony\Component\Routing\RouteCollectionBuilder;
|
||||
|
||||
@@ -58,4 +59,78 @@ class Kernel extends BaseKernel
|
||||
$routes->import($confDir.'/{routes}/'.$this->environment.'/**/*'.self::CONFIG_EXTS, '/', 'glob');
|
||||
$routes->import($confDir.'/{routes}'.self::CONFIG_EXTS, '/', 'glob');
|
||||
}
|
||||
|
||||
public static function bootstrapCli(array &$argv)
|
||||
{
|
||||
// consume --env and --no-debug from the command line
|
||||
|
||||
// when using symfony/console v4.2 or higher, this should
|
||||
// be replaced by a call to Application::bootstrapEnv()
|
||||
|
||||
for ($i = 0; $i < \count($argv) && '--' !== $v = $argv[$i]; ++$i) {
|
||||
if ('--no-debug' === $v) {
|
||||
putenv('APP_DEBUG='.$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0');
|
||||
$argvUnset[$i] = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for ($i = 0; $i < \count($argv) && '--' !== $v = $argv[$i]; ++$i) {
|
||||
if (!$v || '-' !== $v[0] || !preg_match('/^-(?:-env(?:=|$)|e=?)(.*)$/D', $v, $v)) {
|
||||
continue;
|
||||
}
|
||||
if (!empty($v[1]) || !empty($argv[1 + $i])) {
|
||||
putenv('APP_ENV='.$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = empty($v[1]) ? $argv[1 + $i] : $v[1]);
|
||||
$argvUnset[$i] = $argvUnset[$i + empty($v[1])] = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!empty($argvUnset)) {
|
||||
$argv = array_values(array_diff_key($argv, $argvUnset));
|
||||
}
|
||||
}
|
||||
|
||||
public static function bootstrapEnv($env = null)
|
||||
{
|
||||
if (null !== $env) {
|
||||
putenv('APP_ENV='.$_SERVER['APP_ENV'] = $env);
|
||||
}
|
||||
|
||||
if ('prod' !== $_SERVER['APP_ENV'] = isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : (isset($_ENV['APP_ENV']) ? $_ENV['APP_ENV'] : null)) {
|
||||
if (!class_exists(Dotenv::class)) {
|
||||
throw new \RuntimeException('The "APP_ENV" environment variable is not defined. You need to set it or run "composer require symfony/dotenv" to load it from a ".env" file.');
|
||||
}
|
||||
|
||||
// when using symfony/dotenv v4.2 or higher, this call and the related methods
|
||||
// below should be replaced by a call to the new Dotenv::loadEnv() method
|
||||
self::loadEnv(new Dotenv(), \dirname(__DIR__).'/.env');
|
||||
}
|
||||
|
||||
$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : 'dev';
|
||||
$_SERVER['APP_DEBUG'] = isset($_SERVER['APP_DEBUG']) ? $_SERVER['APP_DEBUG'] : (isset($_ENV['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';
|
||||
}
|
||||
|
||||
private static function loadEnv(Dotenv $dotenv, $path)
|
||||
{
|
||||
$dotenv->load($path);
|
||||
|
||||
if (null === $env = isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : (isset($_ENV['APP_ENV']) ? $_ENV['APP_ENV'] : null)) {
|
||||
$dotenv->populate(array('APP_ENV' => $env = 'dev'));
|
||||
}
|
||||
|
||||
if ('test' !== $env && file_exists($p = "$path.local")) {
|
||||
$dotenv->load($p);
|
||||
$env = isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : (isset($_ENV['APP_ENV']) ? $_ENV['APP_ENV'] : $env);
|
||||
}
|
||||
|
||||
if (file_exists($p = "$path.$env")) {
|
||||
$dotenv->load($p);
|
||||
}
|
||||
|
||||
if (file_exists($p = "$path.$env.local")) {
|
||||
$dotenv->load($p);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user