首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >APP_ENV和APP_DEBUG常量在Symfony应用程序中有什么影响?

APP_ENV和APP_DEBUG常量在Symfony应用程序中有什么影响?
EN

Stack Overflow用户
提问于 2019-08-11 17:31:31
回答 1查看 3K关注 0票数 2

这些环境变量的各种设置有什么作用?

我目前的猜测是,APP_ENV仅用于选择加载哪个配置(config/packages/{APP_ENV}/*),APP_DEBUG打开/关闭内核事件的附加控制台输出,并启用异常等的调试视图。

这是正确的,还是这些变量做了额外的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-11 21:30:39

APP_ENV使用:

确定要在配置目录中加载哪些配置文件。

这是在Kernel类中完成的。

默认情况下,在提供的configureContainer()方法中可以找到这一行,其中$this->environment表示APP_ENV的值。

代码语言:javascript
复制
$loader->load( $confDir . '/{packages}/' . $this->environment . '/**/*' . self::CONFIG_EXTS, 'glob' );

显然,您可以根据自己的需要定制和/或更改该行为。

确定要加载的.env文件。

在文件config/bootstrap.php中,您将看到基本的环境初始化。此脚本使用DotEnv组件读取.env文件

代码语言:javascript
复制
(new Dotenv())->loadEnv(dirname(__DIR__).'/.env');

该组件将使用APP_ENV的值来搜索它们。如果你看一下DotEnv::loadEnv(),你会看到这个:

代码语言:javascript
复制
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_DEBUGbootstrap.php会根据APP_ENV的值进行设置。在这一行可以清楚地看到这一点:

代码语言:javascript
复制
$_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.phpbin/console)的入口点脚本,其中您将看到以下两种用法:

以全局初始化错误报告和错误处理。这是使用Debug::enable()完成的

代码语言:javascript
复制
if ( $_SERVER['APP_DEBUG'] ) {
    umask( 0000 );

    Debug::enable();
}

Debug::enable()方法简单且易于理解:它更改error_reporting,设置displays_errors,并注册错误和异常处理程序。

初始化应用程序的Kernel

代码语言:javascript
复制
$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);

这将设置%kernel.debug% (Kernel::isDebug())参数。当系统被认为处于调试模式时,许多包可以使用这个值来决定要做什么。没有强制的行为,每个模块都可以以最适合模块用例的方式使用信息。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57448843

复制
相关文章

相似问题

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