2016-08-23 20 views
1

Ich wundere mich, wenn es möglich ist, benutzerdefinierte Ausnahme zu werfen, wenn unter einer Bedingung/Abfrage Laravel Eloquent Modell nicht gefunden wird?Wie überschreibt man ModelNotFoundException in Laravels Eloquent Models?

Zum Beispiel, wenn ich ein Page Modell habe, wie kann ich meine benutzerdefinierte, PageNotFound Ausnahme werfen?

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Page extends Model { 
} 

Dieses Modell wird ModelNotFoundException mit der angegebenen Meldung werfen:

No query results for model [App\Page]. 
+0

Um die von Ihnen gestellte Frage zu beantworten, könnten Sie die 'findOrFail'- und' firstOrFail'-Methoden in jedem Modell buchstäblich außer Kraft setzen, anstatt eine 'ModelNotFoundException' zu werfen. Wie in Tonys Antwort erwähnt, könntest du stattdessen 'getModel()' aufrufen. – tam5

Antwort

3

In app/Exceptions/Handler.php versuchen, den folgenden Code am Anfang der Funktion macht

public function render($request, Exception $e) 
     { 
      if ($e 
       instanceof 
       \Illuminate\Database\Eloquent\ModelNotFoundException) 
      { 
       abort(404); 
      } 

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

EDIT
Hinzufügen Sobald Sie das ModelNotFoundE fangen Xception Objekt, können SiegetModel()darauf aufrufen, um den Klassennamen des Modells zu erhalten.

+0

Ja, ich weiß, wie man die Ausnahmen "behandelt", aber ich habe verschiedene Arten von Modellen, wie Seite, Post und usw. Wie man (ohne $ e-> getMessage() der ModelNotFound-Ausnahme zu analysieren), welches Model wurde nicht gefunden? Was ich fragen ist, wie meine eigene benutzerdefinierte Ausnahme zu werfen, wenn Model nicht gefunden? Ich könnte in meinem Controller zu tun, um zu überprüfen, ob die Abfrage Ergebnisse zurückgegeben, und danach Ausnahme werfen oder einfach tun, was ich tun möchte, aber gibt es keine einfache Lösung für meine Frage? –

+0

rufen Sie einfach getModel() auf ModelNotFoundException-Objekt. Siehe meine Bearbeitung –

+0

$ e-> getModel() -Methode ist eine, die ich nicht wusste. Es hat wirklich meine Frage nicht beantwortet, aber es ist viel besser, dann habe ich es vorher gemacht. Vielen Dank! –

Verwandte Themen