2015-12-13 28 views

Trả lời

11

Bạn có hai cách để xử lý các trường hợp ngoại lệ và hiển thị một phản ứng tùy chỉnh:

1) Hãy để khuôn khổ xử lý chúng cho bạn:

Nếu bạn không xử lý trường hợp ngoại lệ bởi chính mình, Laravel sẽ xử lý chúng trong lớp:

App\Exceptions\Handler 

Trong phương pháp render bạn có thể đánh chặn các renderning của tất cả các trường hợp ngoại lệ khuôn khổ tăng. Vì vậy, nếu bạn muốn làm một cái gì đó đặc biệt là khi một ngoại lệ cụ thể tăng lên, bạn có thể thay đổi phương pháp mà theo cách này:

public function render($request, Exception $e) 
{ 
    //check the type of the exception you are interested at 
    if ($e instanceof QueryException) { 

     //do wathever you want, for example returining a specific view 
     return response()->view('my.error.view', [], 500); 
    } 

    return parent::render($request, $e); 
} 

2) Xử lý các trường hợp ngoại lệ bởi bản thân:

Bạn có thể tự xử lý các ngoại lệ, với các khối try-catch. Ví dụ trong phương pháp của một bộ điều khiển:

try 
{ 
    //code that will raise exceptions 
} 
//catch specific exception.... 
catch(QueryException $e) 
{ 
    //...and do whatever you want 
    return response()->view('my.error.view', [], 500);  
} 

Sự khác biệt chính giữa hai trường hợp là trong trường hợp 1 bạn đang xác định một chung, ứng dụng rộng cách tiếp cận để xử lý ngoại lệ cụ thể.

Mặt khác, trong trường hợp 2, bạn có thể xác định ngoại lệ hadling trong điểm cụ thể của ứng dụng của bạn

+0

cảm ơn đến tất cả tôi đã cố gắng cả hai trường hợp mà vẫn có Oooops trang tôi chắc chắn rằng tôi đã bỏ lỡ một số điều –

+0

cố gắng đặt câu lệnh 'die ('catched');' bên trong khối catch để xem liệu ngoại lệ có được mã lệnh bắt đúng hay không. Nếu không, mã có ném ngoại lệ bên trong khối thử không? – Moppo

0

đây là công việc với tôi tốt

if ($ e instanceof \ PDOException) {

 $dbCode = trim($e->getCode()); 
     //Codes specific to mysql errors 
     switch ($dbCode) 
     { 
      case 23000: 
       $errorMessage = 'my 2300 error message '; 
       break; 
      default: 
       $errorMessage = 'database invalid'; 
     } 


     return redirect()->back()->with('message',"$errorMessage"); 


    } 
+1

Ở đây bạn được đánh bắt một 'PDOException' như vậy có lẽ mã của bạn được tăng một' PDOException', không phải là một 'QueryException' như bạn đã nêu trong câu hỏi – Moppo

+0

thân Moppo tôi cũng đã cố gắng if ($ e instanceof Exception) { // làm bất cứ điều gì bạn muốn, ví dụ như returining một cái nhìn cụ thể trả lời trả lại() -> xem ('my.error.view', [], 500); } trả về cấp độ gốc :: hiển thị ($ request, $ e); } và đang làm việc tại Handler.php nhưng thử cactch trong contlloer không làm việc tại sao –

+1

nếu bạn muốn bắt theo cùng một cách trong bộ điều khiển, bạn nên làm: 'catch (\ PDOException $ e)' – Moppo

Các vấn đề liên quan