2015-12-13 9 views

Odpowiedz

11

Masz dwa sposoby obsługi wyjątków i pokazać odpowiedź niestandardowe:

1) Niech ramy obsługiwać je dla Ciebie:

Jeśli nie obsługiwać Wyjątki od siebie, laravel będzie obsługiwać je w klasie:

App\Exceptions\Handler 

W metodzie render można przechwycić renderning wszystkich wyjątków ramy wzrasta. Tak więc, jeśli chcesz coś zrobić, zwłaszcza gdy specyficzny wyjątek wzrasta, można zmodyfikować tej metody w ten sposób:

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) Uchwyt wyjątki od siebie:

Można obsługiwać wyjątki samemu, korzystając z bloków try-catch. Na przykład w metodzie kontrolera za:

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

Główną różnicą między tymi dwoma przypadkami jest to, że w przypadku 1 definiujesz ogólne, aplikacji szeroki podejście obsługiwać konkretne wyjątki.

Z drugiej strony, w przypadek 2 można zdefiniować wyjątek hadling w określonych punktach z aplikacji

+0

dziękujemy wszystkim próbowałem oba przypadki i jeszcze Oooops stronę jestem pewien, że brakowało trochę rzeczy –

+0

spróbuj umieścić instrukcję 'die ('catched');' wewnątrz bloku catch, aby sprawdzić, czy wyjątek jest prawidłowo przechwycony przez kod. Jeśli nie, to czy kod rzuca wyjątek wewnątrz bloku try? – Moppo

0

to praca ze mną w porządku

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

Tutaj jesteś złapanie 'PDOException' więc prawdopodobnie Twój kod rosła do' PDOException', a nie 'QueryException' jak wskazano w pytaniu – Moppo

+0

drogi Moppo Próbowałem też if ($ e instanceof Exception) { // czy chcesz, na przykład, powtarzasz określony widok odpowiedź zwrotna() -> widok ("my.error.view", [], 500); } return parent :: render ($ request, $ e); } i pracuje w Handler.php ale spróbuj cactch w contlloer nie pracuj dlaczego –

+1

jeśli chcesz złapać w ten sam sposób w kontrolerze, powinieneś zrobić: 'catch (\ PDOException $ e)' – Moppo

Powiązane problemy