2015-10-28 3 views
0

Сразу после создания экземпляра моего нового приложения Silex \ Application я хотел бы условно установить $ app ['debug'] в зависимости от того, находит ли он себя в моем домене DEV или мой домен PROD.

Я сейчас делаю:

$app = new Application(); 
$request = Request::createFromGlobals(); 

if ($request->getHost() == 'production.mydomain') { // PRODuction 
    $app['debug'] = false; 
} else { // DEVelopment 
    $app['debug'] = true; 
} 

Согласно http://silex.sensiolabs.org/doc/usage.html#example-post-route

Текущий запрос автоматически впрыскивается Silex к закрытию благодаря типа намекая. Это экземпляр Request, так что вы можете получить переменные fetch с помощью метода get request.

Но по причинам, которые я не понимаю, текущий запрос не представляется доступным в контексте, где мне нужно установить $ app ['debug'], поэтому я создаю экземпляр копии со статическим createFromGlobals. Все это кажется немного расточительным.

Есть ли лучший способ сделать это? Благодаря!

ответ

1

Сразу после создания экземпляра приложения все еще не настроено. Он не начинает обрабатывать фактический запрос до тех пор, пока вы не назовете его run().

Попробуйте установить отладку на уровне приложения перед промежуточным программным обеспечением.

+0

Спасибо - это имеет смысл. Я использовал $ app ['debug'] в качестве аргумента: ExceptionHandler :: register ($ app ['debug']); и я не думаю, что это возможно или имеет смысл сделать это в промежуточном программном обеспечении. –

+0

Нет, не имеет смысла. Я всегда настраивал debug через конфигурационный файл или переменную env. – Maerlyn

0

Вы можете жёстко его в начальной загрузке с помощью $_SERVER глобального:

$debug = isset($_SERVER['HTTP_HOST'] 
     && 'production.mydomain' === $_SERVER['HTTP_HOST'] 
     ? false : true; 

$app = new Application(['debug' => $debug]); 

$app->run(); // calls Request::createFromGlobals() 
Смежные вопросы