Web

Как и где устанавливается $ _SERVER ['APP_DEBUG'] в Symfony >= 5.1?

В 12 строке index.php файла сценария, который Symfony 5-ой версии, создает, когда я запускаю команду symfony new <project> --full. Как показано ниже, я проверяю, если супер глобальная переменная $_SERVER [ «APP_DEBUG»] установлена в true, это позволяет использовать отладку в Symfony.

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'] , так как он не является частью установленных пакетов поставщика или он не прописан в конфигурации.

Есть где-нибудь значение по умолчанию?

 

Ответ 1

Раньше значение устанавливалось в файле bootstrap.php, который поставлялся с рецептами Symfony < 5.1 flex.

Начиная с Symfony 5.1 этот файл больше не включается в рецепт, и это делается компонентом DotEnv напрямую, в методе bootEnv() (который, по умолчанию, вызывается во фронт-контроллере, либо в index.php, либо в консоли).

 

// index.php

(new Dotenv())->bootEnv(dirname(__DIR__) . '/.env');

 

В документации для этого метода сказано:

Параметры env загружаются из .env.local.php, если файл существует, или из других файлов .env в противном случае.

  •  Этот метод также настраивает переменную env APP_DEBUG в соответствии с текущим APP_ENV.
  •  Правила, связанные с файлами .env, см. в методе loadEnv().

 И включает в себя метод, аналогичный тому, который 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 является производственной средой.

Схожие статьи

Web

Проверка на сертификат в HTTPS и SSL3_GET_SERVER_CERTIFICATE

Web

Как я могу хранить и извлекать изображения из базы данных MySQL с помощью PHP

Web

Как получить значения функции при вводе значения из PHP формы?

Web

PHP REST API POSTMAN. Фатальная ошибка Uncaught PDOException: SQLSTATE[42000]: Синтаксическая ошибка или нарушение доступа: 1064 У вас ошибка в синтаксисе SQL