2013-06-16 29 views
5

Wygląda na to, że nie jest możliwe złapanie błędów samodzielnie, po otrzymaniu błędu 4 wyjścia laravel.Laravel 4 - Błędy połowu

Na przykład jeśli próbuję:

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

Jeśli wystąpi błąd i nie dostanie "error", insted laravel pokazuje mi wyjątek (w tym pomarańczowym miejscu).

To samo jeśli iść dalej i spróbować

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

Czy istnieje jakiś sposób, aby to zrobić?

Odpowiedz

16

Kod podałeś powinien działać dobrze. Jeśli umieściłem to w moim routes.php, widzę oczekiwany ciąg znaków błędu (bez koloru pomarańczowego).

To, co może się tu zdarzyć, to to, że Twój wyjątek PDOException nie został złapany. Spróbuj dodać ukośnik odwrotny do wyjątku PDOException, aby upewnić się, że jest zdefiniowany w katalogu głównym, a nie w bieżącym obszarze nazw.

catch(\PDOException $exception) 

Spróbuj również uruchomić kod bezpośrednio z pliku routes.php i sprawdź, czy zachowuje się tak samo.

+0

Dziękuję bardzo. To był problem z Obszarem Nazw, który wskazałeś. Nie wiedziałem, że to działa w ten sposób. Jeszcze raz dziękuję. – Michael

+0

Nie ma problemu, problemy z ustawieniami nazw przestraszyły nas w pewnym momencie ;-) – DerLola

+0

Tak, dziękuję za uwagę w kwestii przestrzeni nazw. –

2

Spójrz na tej stronie: http://laravel.com/docs/errors

Krótki przykład:

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

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

Cóż, musisz dodać to do pliku global.php, ale to nie jest to, czego chcę. Na przykład, jeśli chcesz sprawdzić, czy dane bazy danych są poprawne, podczas postępu instalacji, chcesz podać błąd niestandardowy. Globalna obsługa błędów nie pomoże mi tam. – Michael

+0

Andrea ma rację. Możesz dostosować swój błąd komunikatu, gdy go wyrzucisz. – frenus

+0

Jak? Nie chcę po prostu dostosowywać wiadomości, czasem chcę ją wyświetlać w niestandardowym widoku, czasami na stronie blanp itd. Jak mogę to zrobić? – 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 
}); 

umieścić ten kod w pliku trasy ...
dostaniesz błędów Komunikat z nazwy pliku i Error Line
wszystkie większość błędów zostaną pokryte.