2013-06-16 52 views
5

Có vẻ như không thể tự mình phát hiện lỗi, được cài đặt đầu ra lỗi đầu ra laravel 4.Laravel 4 - Lỗi bắt gặp

Ví dụ nếu tôi cố gắng:

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

Nếu một lỗi xảy ra tôi sẽ không nhận được "lỗi", insted laravel chỉ cho tôi những ngoại lệ (trên trang web đó màu cam).

Cùng nếu bạn đi trước và thử một

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

Có cách nào để làm điều đó?

Trả lời

16

Mã bạn cung cấp nên chỉ làm việc tốt. Nếu tôi đặt điều này trong routes.php của tôi, tôi thấy chuỗi lỗi dự kiến ​​(không có màu cam).

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

Điều gì có thể xảy ra ở đây là PDOException của bạn không bị phát hiện. Hãy thử thêm dấu gạch chéo ngược vào PDOException để bạn chắc chắn đó là dấu gạch chéo ngược được xác định trong thư mục gốc chứ không phải trong không gian tên hiện tại.

catch(\PDOException $exception) 

Ngoài ra, hãy thử chạy mã trực tiếp từ tệp routes.php và xem nó có hoạt động giống nhau không.

+0

Cảm ơn bạn rất nhiều. Đó là vấn đề Không gian tên mà bạn đã chỉ ra. Không biết rằng điều này hoạt động như thế. Một lần nữa xin cảm ơn. – Michael

+0

Không vấn đề gì, các vấn đề về không gian tên đã bắt gặp tất cả chúng ta tại một số điểm ;-) – DerLola

+0

Cảm ơn bạn đã trả lời về vấn đề không gian tên. –

2

Hãy xem trang này: http://laravel.com/docs/errors

nhanh Ví dụ:

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

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

Bạn cần phải thêm phần này vào global.php, nhưng đó không phải là những gì tôi muốn. Ví dụ: nếu bạn muốn kiểm tra xem dữ liệu cơ sở dữ liệu có chính xác không, trong quá trình diễn tiến, bạn muốn đưa ra một lỗi tùy chỉnh. Một trình xử lý lỗi toàn cầu sẽ không giúp tôi ở đó. – Michael

+0

Andrea là đúng. Bạn có thể tùy chỉnh lỗi tin nhắn của bạn khi bạn ném nó. – frenus

+0

Làm cách nào? Tôi không chỉ muốn tùy chỉnh các tin nhắn, đôi khi tôi muốn hiển thị nó trên một cái nhìn tùy chỉnh, đôi khi trên một trang blanp, vv Làm thế nào tôi có thể làm điều đó? – 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 
}); 

đặt mã này trong tập tin tuyến đường của bạn ...
bạn sẽ nhận được thông báo lỗi với TÊN FILE và Error Line
tất cả hầu hết các lỗi sẽ được bảo hiểm.