首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$_SERVER[ 'APP_DEBUG‘]是如何和在什么地方设置在Symfony >=5.1中的?

$_SERVER[ 'APP_DEBUG‘]是如何和在什么地方设置在Symfony >=5.1中的?
EN

Stack Overflow用户
提问于 2021-04-29 07:05:42
回答 1查看 897关注 0票数 1

在我运行index.php命令时,Symfony 5创建的symfony new <project> --full脚本文件的第12行上,有一个if-测试,当$_SERVER 'APP_DEBUG‘超级全局is true启用Symfony的Debug类时。

代码语言:javascript
复制
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‘里,它是怎么到那里的?

注意:bootstrap.php脚本似乎是在$_SERVER 'APP_ENV‘中设置调试标志,但该脚本不是已安装的供应商包的一部分,也不是配置目录下的一部分,因此没有调用,因此不可能设置此标志。

奈杰尔·任,提出:

类似于.env文件(stackoverflow.com.…/质询/54252210/…)。

但是,我的项目的.env文件没有APP_DEBUG条目。

某个地方有默认值吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-29 07:21:00

这个值过去是在bootstrap.php上设置的,它随Symfony <5.1Flex食谱而来。

由于Symfony 5.1文件不再包含在菜谱中,DotEnv组件也直接在bootEnv()方法(默认情况下,在前端控制器( index.phpconsole)中调用该方法)上这样做。

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

那种方法的文档块说:

代码语言:javascript
复制
/**
 * 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过去所包含的方法类似的方法:

代码语言:javascript
复制
$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为“non”环境,默认情况下只有prod是生产环境。

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

https://stackoverflow.com/questions/67312530

复制
相关文章

相似问题

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