Kurze Erklärung
Die Debug::enable()
Methode registriert eine Ausweichfehlerbehandlungsroutine, die aufgerufen wird, wenn die Anwendung einen Fehler zu handhaben ist fehlgeschlagen.
Die Fehlerseite, die beim Booten des Kernels mit dem $debug
-Flag auf true
angezeigt wird, ist das Ergebnis Ihrer Anwendungsfehlerbehandlung (implementiert von einem Ausnahme-Listener). Setzen Sie das Flag auf false
, um Stack-Traces zu deaktivieren. Wenn Sie nur nach dem Testen sind, können Sie auch disable error pages in development.
Die von der Debug-Komponente angezeigte Seite ist nicht so schön wie die vom Ausnahme-Listener, aber es ist schöner als die PHP-Seite.
Ausführliche Erklärung
Der Front-Controller ruft die Anwendung Kernel:
$kernel = new AppKernel('dev', true);
$response = $kernel->handle(Request::createFromGlobals());
Die Anwendung Kernel bootet selbst erzeugt den Container und ruft den http-Kernel die Anfrage zu bearbeiten:
public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
{
if (false === $this->booted) {
$this->boot();
}
return $this->getHttpKernel()->handle($request, $type, $catch);
}
Der http-Kernel verwendet den Event-Dispatcher, um bestimmte Ereignisse auszulösen (kernel.request
, , kernel.exception
usw.). Wenn eine Ausnahme ausgelöst wird, während die Anforderung bearbeitet wird, wird der http-Kernel es fangen und löst das kernel.exception
Ereignis:
// 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);
// ...
}
Einer der standardmäßig in der Symfony Standard Edition registriert Listener die Symfony\Component\HttpKernel\EventListener\ExceptionListener
ist. Es ist verantwortlich für das Rendern schöner Fehlerseiten.
Es werden jedoch nur Ausnahmen behandelt, die beim Verarbeiten einer Anforderung im HTTP-Kernel ausgelöst werden. Wenn also irgendetwas außerhalb dieses Anrufs schief geht, wird es nicht behandelt (schauen Sie sich den Catch-Blog im vorherigen Codebeispiel an).
Hier kommt die Debug-Komponente ins Spiel. Die Methode Debug::enable()
registriert einen Fehlerbehandler, einen Ausnahmebehandler und einen speziellen Klassenlader. Sie können es in jedem PHP-Projekt ohne den http-Kernel verwenden. Es handelt sich um eine Fallback-Fehlerbehandlung, die aufgerufen wird, wenn Ihre Anwendung einen Fehler nicht verarbeiten konnte. Es hat keine Beziehung zu dem Konstruktorargument $debug
im Kernel.