Debug::enable()
方法は、アプリケーションがエラーを処理するために失敗した場合に呼び出されるフォールバックエラーハンドラを登録
短い説明。
$debug
フラグがtrue
に設定されているカーネルが起動したときに表示されるエラーページは、アプリケーションエラー処理(例外リスナーによって実装されています)の結果です。スタックトレースを無効にするには、フラグをfalse
に設定します。あなたがテストの後でさえあれば、disable error pages in developmentでもかまいません。
Debugコンポーネントで表示されるページは、例外リスナーによって提供されるページほど素晴らしいものではありませんが、PHPよりも優れています。
詳細説明
フロントコントローラは、アプリケーションのカーネルを呼び出します。
$kernel = new AppKernel('dev', true);
$response = $kernel->handle(Request::createFromGlobals());
アプリケーションのカーネルが起動自体、コンテナを作成し、要求を処理するためのHTTPカーネルを呼び出します。
public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
{
if (false === $this->booted) {
$this->boot();
}
return $this->getHttpKernel()->handle($request, $type, $catch);
}
httpカーネルはイベントディスパッチャを使用して特定のイベントをトリガします(kernel.request
、kernel.response
、kernel.exception
など)。リクエストの処理中に例外がスローされた場合は、httpカーネルはそれをキャッチし、kernel.exception
イベントをトリガします:Symfonyのスタンダード版ではデフォルトで登録されたリスナーの
// the following code is simplified to show the point
public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
{
try {
return $this->handleRaw($request, $type);
} catch (\Exception $e) {
return $this->handleException($e, $request, $type);
}
}
private function handleException(\Exception $e, $request, $type)
{
$event = new GetResponseForExceptionEvent($this, $request, $type, $e);
$this->dispatcher->dispatch(KernelEvents::EXCEPTION, $event);
// ...
}
一つはSymfony\Component\HttpKernel\EventListener\ExceptionListener
です。これは素晴らしいエラーページの描画を担当します。
しかし、httpカーネルで要求を処理するときに例外が発生するだけです。したがって、この呼び出しの外で何かがうまくいかなければ、それは処理されません(前のコード例のキャッチブログを見てください)。
ここにDebugコンポーネントがあります。Debug::enable()
メソッドは、エラーハンドラ、例外ハンドラ、および特殊なクラスローダーを登録します。 httpカーネルなしで、どのPHPプロジェクトでも使用できます。これは、アプリケーションがエラーを処理できなかった場合に呼び出されるフォールバックエラーハンドラの一種です。カーネルの$debug
コンストラクタ引数とは関係ありません。