Um explizit einen Parameter zu einem Modell zu binden und werfen eine benutzerdefinierte Ausnahme Ich habe (unter anderem) folgende Unterlagen an das RouteServiceProvider
hinzufügen: (Explicit Binding) Anpassen der Resolution Logic & Customizing Die „Not Found“ Verhalten
$router->model('parameter', 'App\Model', function() {
throw new CustomNotFoundException;
});
um die Auflösung Logik der expliziten Bindung anpassen ich folgendes zum RouteServiceProvider
hinzufügen:
$router->bind('parameter', function ($parameter) {
return App\Model::where('field', $parameter)->first();
});
Mein Problem ist, dass ich beide brauchen aber anscheinend nicht. Wenn ich den Parameter an das Modell anbinde und auch die Auflösungslogik anpasse, wirft er nicht meine CustomNotFoundException
, stattdessen wird der Standardwert ModelNotFoundException
geworfen.
Um mein Ziel klar zusammenzufassen: Ich möchte die Auflösungslogik anpassen und eine benutzerdefinierte Ausnahme auslösen, wenn es keinen Datensatz findet.
EDIT ich dies nach einem Vorschlag von @Maraboc versucht:
$router->bind('parameter', function ($parameter) {
try {
return App\Model::where('field' => $parameter)->first();
} catch (Exception $e) {
throw new CustomNotFoundException;
}
});
Das wird noch ein ModelNotFoundException
aus einem Grunde wirft ich nicht bewusst bin.
Versuchen Sie, 'App \ Model :: wo ('Feld', $ -Parameter) -> first();' mit try catch zu fangen 'ModelNotFoundException' und werfen Sie stattdessen Ihre' CustomNotFoundException' statt – Maraboc
@Maraboc Ich habe es versucht, aber es ist funktioniert nicht, vielleicht habe ich etwas falsch gemacht. Bitte überprüfe die Änderung, die ich gerade am OP gemacht habe. Vielen Dank! – RektByAyyLMAO