2013-06-16 26 views
5

Es scheint, als ob es nicht möglich ist, Fehler selbst zu erkennen, anstatt die Laravel 4 Fehlerausgabe zu bekommen. wennLaravel 4 - Catch Fehler

Zum Beispiel ich versuche:

$databaseConfig = Config::get('database.connections.mysql'); 
    $connect = mysql_connect($databaseConfig['host'], $databaseConfig['username'], $databaseConfig['password']); 
    if (!$connect) 
    { 
     return 'error'; 
    } 

Wenn ein Fehler i auftritt, wird die "Fehler" nicht bekommen, insted Laravel zeigt mir die Ausnahme (auf dieser Orange-Website).

Das gleiche, wenn Sie voran gehen und ein

try { 
    $pdo = DB::connection('mysql')->getPdo(); 
} 
    catch(PDOException $exception) { 
    return Response::make('Database error! ' . $exception->getCode()); 
} 

Gibt es eine Möglichkeit versuchen, das zu tun?

Antwort

16

Der Code, den Sie sollte gut funktionieren zur Verfügung gestellt. Wenn ich dies in meine routes.php stelle, sehe ich die erwartete Fehlerzeichenfolge (ohne Orange).

Was hier passieren könnte, ist, dass Ihre PDOException nicht abgefangen wird. Versuchen Sie, der PDOException einen umgekehrten Schrägstrich hinzuzufügen, damit Sie sicher sein können, dass dieser im Root-Verzeichnis und nicht im aktuellen Namespace definiert ist.

catch(\PDOException $exception) 

Versuchen Sie auch, den Code direkt aus der Datei routes.php auszuführen, und sehen Sie, ob er sich gleich verhält.

+0

Vielen Dank. Es war das Namespace-Problem, auf das Sie hingewiesen haben. Wusste nicht, dass das so funktioniert. Noch einmal vielen Dank. – Michael

+0

Kein Problem, Namespacing-Probleme haben uns irgendwann alle erwischt ;-) – DerLola

+0

Danke für den Heads-up zum Namespace-Problem. –

2

Werfen Sie einen Blick auf diese Seite: http://laravel.com/docs/errors

Schnell Beispiel:

App::error(function(PDOException $e) 
{ 
    Log::error($exception); 

    return Response::make('Database error! ' . $exception->getCode()); 
}); 
+0

Nun, Sie müssen dies in die global.php hinzufügen, aber das ist nicht was ich will. Wenn Sie beispielsweise während des Installationsvorgangs überprüfen möchten, ob die Datenbankdaten korrekt sind, möchten Sie einen benutzerdefinierten Fehler ausgeben. Ein globaler Fehlerhandler wird mir dort nicht helfen. – Michael

+0

Andrea hat Recht. Sie können Ihren Nachrichtenfehler anpassen, wenn Sie ihn werfen. – frenus

+0

Wie? Ich möchte nicht nur die Nachricht anpassen, manchmal möchte ich es auf einer benutzerdefinierten Ansicht, manchmal auf einer Blaupause, usw. zeigen. Wie kann ich das tun? – Michael

1
App::error(function(Exception $exception) { 
echo '<pre>'; 
echo 'MESSAGE :: '; 
    print_r($exception->getMessage()); 
echo '<br> CODE ::'; 
    print_r($exception->getCode()); 
echo '<br> FILE NAME ::'; 
    print_r($exception->getFile()); 
echo '<br> LINE NUMBER ::'; 
    print_r($exception->getLine()); 
die();// if you want than only 
}); 

put dieser Code in Ihre Route Datei ...
Sie Fehlermeldung mit Dateinamen und Fehlerzeile
alle die meisten Fehler abgedeckt werden erhalten.