TypePHP 编译器
https://swoole.com/aot/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.6 KiB
51 lines
1.6 KiB
--TEST--
|
|
Symfony Runtime style global options and server/env coalesce assignment
|
|
--FILE--
|
|
<?php
|
|
class SymfonyRuntimeOptionsCase
|
|
{
|
|
public array $options;
|
|
|
|
public function __construct(array $options = [])
|
|
{
|
|
$envKey = $options['env_var_name'] ??= 'APP_ENV';
|
|
$debugKey = $options['debug_var_name'] ??= 'APP_DEBUG';
|
|
|
|
if (isset($options['project_dir']) && $projectDirVar = $options['project_dir_var'] ?? 'APP_PROJECT_DIR') {
|
|
$_SERVER[$projectDirVar] = $_ENV[$projectDirVar] = $options['project_dir'];
|
|
}
|
|
|
|
$_SERVER[$envKey] ??= $_ENV[$envKey] ?? 'dev';
|
|
$_SERVER[$debugKey] ??= $_ENV[$debugKey] ?? !in_array($_SERVER[$envKey], (array) ($options['prod_envs'] ?? ['prod']), true);
|
|
|
|
$options['debug'] ??= '1' === (string) $_SERVER[$debugKey];
|
|
$options['disable_dotenv'] = true;
|
|
|
|
$this->options = $options;
|
|
}
|
|
}
|
|
|
|
function main(): void
|
|
{
|
|
unset($_SERVER['APP_ENV'], $_SERVER['APP_DEBUG'], $_SERVER['APP_PROJECT_DIR']);
|
|
unset($_ENV['APP_ENV'], $_ENV['APP_DEBUG'], $_ENV['APP_PROJECT_DIR']);
|
|
|
|
$runtime = new SymfonyRuntimeOptionsCase(['project_dir' => '/app', 'prod_envs' => ['prod', 'stage']]);
|
|
|
|
var_dump($_SERVER['APP_ENV']);
|
|
var_dump($_SERVER['APP_DEBUG']);
|
|
var_dump($_SERVER['APP_PROJECT_DIR']);
|
|
var_dump($_ENV['APP_PROJECT_DIR']);
|
|
var_dump($runtime->options['env_var_name']);
|
|
var_dump($runtime->options['debug_var_name']);
|
|
var_dump($runtime->options['debug']);
|
|
}
|
|
?>
|
|
--EXPECT--
|
|
string(3) "dev"
|
|
bool(true)
|
|
string(4) "/app"
|
|
string(4) "/app"
|
|
string(7) "APP_ENV"
|
|
string(9) "APP_DEBUG"
|
|
bool(true)
|
|
|