这些环境变量的各种设置有什么作用?
我目前的猜测是,APP_ENV仅用于选择加载哪个配置(config/packages/{APP_ENV}/*),APP_DEBUG打开/关闭内核事件的附加控制台输出,并启用异常等的调试视图。
这是正确的,还是这些变量做了额外的事情?
发布于 2019-08-11 21:30:39
APP_ENV使用:
确定要在配置目录中加载哪些配置文件。
这是在Kernel类中完成的。
默认情况下,在提供的configureContainer()方法中可以找到这一行,其中$this->environment表示APP_ENV的值。
$loader->load( $confDir . '/{packages}/' . $this->environment . '/**/*' . self::CONFIG_EXTS, 'glob' );显然,您可以根据自己的需要定制和/或更改该行为。
确定要加载的.env文件。
在文件config/bootstrap.php中,您将看到基本的环境初始化。此脚本使用DotEnv组件读取.env文件
(new Dotenv())->loadEnv(dirname(__DIR__).'/.env');该组件将使用APP_ENV的值来搜索它们。如果你看一下DotEnv::loadEnv(),你会看到这个:
if (file_exists($p = "$path.$env")) {
$this->load($p);
}
if (file_exists($p = "$path.$env.local")) {
$this->load($p);
}这意味着对于设置为dev的给定APP_ENV,它将尝试先加载.env.dev,然后加载.env.dev.local。
设置APP_DEBUG的值(如果未显式设置)。
如果不设置APP_DEBUG,bootstrap.php会根据APP_ENV的值进行设置。在这一行可以清楚地看到这一点:
$_SERVER['APP_DEBUG'] = $_SERVER['APP_DEBUG'] ?? $_ENV['APP_DEBUG'] ?? 'prod' !== $_SERVER['APP_ENV'];(如果$_SERVER['APP_DEBUG']可用,请使用它,如果没有,请尝试使用$_ENV['APP_DEBUG'],如果APP_ENV不是prod,则将其设置为true )。
APP_DEBUG使用:
此常量用于应用程序(public/index.php或bin/console)的入口点脚本,其中您将看到以下两种用法:
以全局初始化错误报告和错误处理。这是使用Debug::enable()完成的
if ( $_SERVER['APP_DEBUG'] ) {
umask( 0000 );
Debug::enable();
}Debug::enable()方法简单且易于理解:它更改error_reporting,设置displays_errors,并注册错误和异常处理程序。
初始化应用程序的Kernel。
$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);这将设置%kernel.debug% (Kernel::isDebug())参数。当系统被认为处于调试模式时,许多包可以使用这个值来决定要做什么。没有强制的行为,每个模块都可以以最适合模块用例的方式使用信息。
https://stackoverflow.com/questions/57448843
复制相似问题