Wie kann ich abfangen von Fehlern und Ausnahmen in Symfony2/Silex?

Möchte ich fangen beide Fehler und Ausnahmen in meinem Silex-app wickeln Sie Sie in eine benutzerdefinierte JSON-Antwort, die immer dem Kunden zurückgegeben werden. Ich habe festgestellt, drei grundlegende Methoden:

$app->error()
Symfony\Component\Debug\ErrorHandler::register();
Symfony\Component\Debug\ExceptionHandler::register();

Während ich in der Lage bin, zu fangen controller Ausnahmen mit error() ich versage mit php-Fehler - Sie enden immer in xdebug.
Ich bin auch Versagen, zu verstehen, wie error() und ExceptionHandler::register() interagieren mit einander - brauche ich beides? Wie kann ich sicherstellen, dass meine error() Antwort ist JSON?

Ich habe folgenden Beispiel-code jetzt:

use Silex\Application;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class Router extends Silex\Application
{
    function __construct() {
        parent::__construct();

        //routes
        $this->match('/{context}', array($this, 'handler'));

        //error handler
        $this->error(function(\Exception $e, $code) {
            return $this->json(array("error" => $e->getMessage()), $code);
        });
    }

    function handler(Request $request, $context) {
        //throw new \Exception('test'); //exception- this is caught
        $t = new Test(); //error- this is not caught

        return 'DONE';
    }
}

Symfony\Component\Debug\ErrorHandler::register();

$app = new Router();
$app->run();
InformationsquelleAutor andig | 2015-01-22
Schreibe einen Kommentar