为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
临摹微笑 2021-11-19 16:15:51
这些环境变量的各种设置有什么作用?我目前的猜测是它APP_ENV仅用于选择要加载的配置 ( config/packages/{APP_ENV}/*) 并APP_DEBUG打开/关闭内核事件的附加控制台输出,并启用异常等的调试视图。这是正确的还是这些变量做其他事情?
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

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);

}

这意味着对于给定的APP_ENV集合,dev它会尝试先加载.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'],如果未设置将它设置true,如果APP_ENV没有prod)。


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()) 参数。许多包可以使用这个值来决定当系统被认为处于调试模式时要做什么。没有强制行为,每个模块都可以以最适合模块用例的方式使用信息。


查看完整回答
反对 回复 2021-11-19
  • 1 回答
  • 0 关注
  • 200 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信