$_SERVER[ 'APP_DEBUG' ] 在 Symfony >=5.1 中的设置方式和位置?
How and where is $_SERVER[ 'APP_DEBUG' ] set in Symfony >=5.1?
在我 运行 symfony new <project> --full
命令时 Symfony 版本 5 创建的 index.php
脚本文件的第 12 行,如下所示,有一个 if-test,当 $_SERVER[ 'APP_DEBUG' ] 超级全局是 true
,启用 Symfony 的调试 class.
use App\Kernel;
use Symfony\Component\Dotenv\Dotenv;
use Symfony\Component\ErrorHandler\Debug;
use Symfony\Component\HttpFoundation\Request;
require dirname( __DIR__ ) . '/vendor/autoload.php';
( new Dotenv() )->bootEnv( dirname( __DIR__) . '/.env' );
if( $_SERVER[ 'APP_DEBUG' ] ) {
umask( 0000 );
Debug::enable();
} // End of if( $_SERVER[ 'APP_DEBUG' ] ) ...
$kernel = new Kernel( $_SERVER[ 'APP_ENV' ],
(bool)$_SERVER[ 'APP_DEBUG' ] );
$request = Request::createFromGlobals();
$response = $kernel->handle( $request );
$response->send();
$kernel->terminate( $request, $response );
在上述代码调用的控制器中,我想使用类似的测试来确定我的应用程序何时处于 运行 调试模式,但我想知道 [=15= 是如何以及在哪里]设置?
对于问题“APP_ENV 和 APP_DEBUG 常量在 Symfony 应用程序中有什么影响?” bootstrap.php 可以设置 $_SERVER[ 'APP_DEBUG' ],但在我的例子中,bootstrap.php 脚本没有被调用,它不是 vendors 下的第三方脚本之一。
如果它在$_SERVER['APP_ENV'],它是如何到达那里的?
注意: 似乎表明 bootstrap.php 脚本可能在 $_SERVER[ 'APP_ENV' ],但是这个脚本不是已安装的供应商包的一部分,也不在 config 目录下,所以没有被调用,所以不能有设置此标志。
Nigel Ren,出价:
看起来像 .env 文件 (whosebug.com/questions/54252210/…)。
但是,我项目的 .env
文件没有 APP_DEBUG
的条目。
某处有默认值吗?
该值曾在 bootstrap.php
上设置,它随 Symfony <5.1 flex 配方一起提供。
从 Symfony 5.1 开始,该文件不再包含在配方中,DotEnv
组件直接在 bootEnv()
方法(默认情况下调用前端控制器,index.php
或 console
).
// index.php
(new Dotenv())->bootEnv(dirname(__DIR__) . '/.env');
that method 的文档块说:
/**
* Loads env vars from .env.local.php if the file exists or from the other .env files otherwise.
*
* This method also configures the APP_DEBUG env var according to the current APP_ENV.
*
* See method loadEnv() for rules related to .env files.
*/
并且包含与 bootstrap.php
过去包含的方法类似的方法:
$k = $this->debugKey;
$debug = $_SERVER[$k] ?? !\in_array($_SERVER[$this->envKey], $this->prodEnvs, true);
$_SERVER[$k] = $_ENV[$k] = (int) $debug || (!\is_bool($debug) && filter_var($debug, \FILTER_VALIDATE_BOOLEAN)) ? '1' : '0';
基本上,如果您没有明确设置该值,它将默认为 true
到“非生产”环境,默认情况下只有 prod
是生产环境。
在我 运行 symfony new <project> --full
命令时 Symfony 版本 5 创建的 index.php
脚本文件的第 12 行,如下所示,有一个 if-test,当 $_SERVER[ 'APP_DEBUG' ] 超级全局是 true
,启用 Symfony 的调试 class.
use App\Kernel;
use Symfony\Component\Dotenv\Dotenv;
use Symfony\Component\ErrorHandler\Debug;
use Symfony\Component\HttpFoundation\Request;
require dirname( __DIR__ ) . '/vendor/autoload.php';
( new Dotenv() )->bootEnv( dirname( __DIR__) . '/.env' );
if( $_SERVER[ 'APP_DEBUG' ] ) {
umask( 0000 );
Debug::enable();
} // End of if( $_SERVER[ 'APP_DEBUG' ] ) ...
$kernel = new Kernel( $_SERVER[ 'APP_ENV' ],
(bool)$_SERVER[ 'APP_DEBUG' ] );
$request = Request::createFromGlobals();
$response = $kernel->handle( $request );
$response->send();
$kernel->terminate( $request, $response );
在上述代码调用的控制器中,我想使用类似的测试来确定我的应用程序何时处于 运行 调试模式,但我想知道 [=15= 是如何以及在哪里]设置?
对于问题“APP_ENV 和 APP_DEBUG 常量在 Symfony 应用程序中有什么影响?” bootstrap.php 可以设置 $_SERVER[ 'APP_DEBUG' ],但在我的例子中,bootstrap.php 脚本没有被调用,它不是 vendors 下的第三方脚本之一。
如果它在$_SERVER['APP_ENV'],它是如何到达那里的?
注意:
Nigel Ren,出价:
看起来像 .env 文件 (whosebug.com/questions/54252210/…)。
但是,我项目的 .env
文件没有 APP_DEBUG
的条目。
某处有默认值吗?
该值曾在 bootstrap.php
上设置,它随 Symfony <5.1 flex 配方一起提供。
从 Symfony 5.1 开始,该文件不再包含在配方中,DotEnv
组件直接在 bootEnv()
方法(默认情况下调用前端控制器,index.php
或 console
).
// index.php
(new Dotenv())->bootEnv(dirname(__DIR__) . '/.env');
that method 的文档块说:
/**
* Loads env vars from .env.local.php if the file exists or from the other .env files otherwise.
*
* This method also configures the APP_DEBUG env var according to the current APP_ENV.
*
* See method loadEnv() for rules related to .env files.
*/
并且包含与 bootstrap.php
过去包含的方法类似的方法:
$k = $this->debugKey;
$debug = $_SERVER[$k] ?? !\in_array($_SERVER[$this->envKey], $this->prodEnvs, true);
$_SERVER[$k] = $_ENV[$k] = (int) $debug || (!\is_bool($debug) && filter_var($debug, \FILTER_VALIDATE_BOOLEAN)) ? '1' : '0';
基本上,如果您没有明确设置该值,它将默认为 true
到“非生产”环境,默认情况下只有 prod
是生产环境。