php - 在 Symfony >=5.1 中 $_SERVER[ 'APP_DEBUG' ] 如何以及在哪里设置?
问题描述
index.php
在我运行命令时 Symfony 版本 5 创建的脚本文件的第 12 行symfony new <project> --full
,如下所示,有一个 if 测试,当$_SERVER[ 'APP_DEBUG' ] super global istrue
时,启用 Symfony 的 Debug 类。
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 );
在上述代码调用的控制器中,我想使用类似的测试来确定我的应用程序何时以调试模式运行,但我想知道是如何以及在哪里$_SERVER[ 'APP_DEBUG' ]
设置的?
对于“APP_ENV 和 APP_DEBUG 常量在 Symfony 应用程序中的作用是什么?”这个问题。bootstrap.php 可以设置 $_SERVER[ 'APP_DEBUG' ],但在我的情况下,bootstrap.php 脚本没有被调用,它不是供应商下的第三方脚本之一。
如果它在$_SERVER[ 'APP_ENV' ]中,它是如何到达那里的?
注意:APP_ENV 和 APP_DEBUG 常量在 Symfony 应用程序中有什么影响?似乎表明bootstrap.php脚本可以在$_SERVER[ 'APP_ENV' ]中设置调试标志,但该脚本不是已安装的供应商包或配置目录下的一部分,因此不会被调用,因此不能设置这个标志。
Nigel Ren,提供:
看起来像 .env 文件(stackoverflow.com/questions/54252210/...)。
但是,我的项目.env
文件没有APP_DEBUG
.
某处有默认值吗?
解决方案
bootstrap.php
Symfony <5.1 flex recipes的值曾经设置为 on 。
从 Symfony 5.1 开始,该文件不再包含在配方中,DotEnv
组件直接在bootEnv()
方法上完成相同的操作(默认情况下,在前端控制器中调用方法index.php
或console
)。
// index.php
(new Dotenv())->bootEnv(dirname(__DIR__) . '/.env');
该方法的文档块说:
/**
* 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
是生产环境。
推荐阅读
- python - 在 Python 中训练一个 tensorflow 模型,但在 Go 中提供服务
- nuxt.js - TypeError: this.$el.querySelector 不是函数 nuxt filepond
- regex - 如何删除字符串中的括号字符(飞镖)
- regex - 正则表达式匹配除模式之外的所有内容
- angular - 通过@input 更改角度主机
- c# - BINARY_CHECKSUM 实体框架核心 5
- ios - 具有矩形功能的相机访问 (Objc iOS)
- kubernetes - 如何配置 ClusterIssuer 以自定义证书持续时间和续订?
- elasticsearch - Elastic Search / Logstash:同一文档上的大量(近)并发更新
- html - 如何在没有 .load() 函数的情况下自动生成静态 HTML 文件