Laravel abrufen gebundenen Modell in Anfrage
Gibt es eine einfache Möglichkeit zum abrufen der route gebundenen Modell im Rahmen einer Anfrage?
Möchte ich ein Modell aktualisieren, aber bevor ich das Tue, ich möchte einige Berechtigungen überprüft, mit den Anforderungen authorize()
Methode. Aber ich will nur der Besitzer des Modells in der Lage sein, Sie zu aktualisieren.
In der Steuerung, ich würde einfach etwas wie das hier tun:
public function update(Request $request, Booking $booking)
{
if($booking->owner->user_id === Auth::user()->user_id)
{
//Continue to update
}
}
Aber ich bin auf der Suche zu tun, dies im Rahmen der Anfrage, anstatt innerhalb der Steuerung. Wenn ich das mache:
dd(Illuminate\Http\Request::all());
Es nur gibt mir die Skalare form-Eigenschaften (wie _method
und so weiter, aber nicht das Modell).
Frage
Wenn ich binden ein Modell zu einer route, wie kann ich abrufen, das Objektmodell von innerhalb einer Anfrage?
Vielen Dank im Voraus.
- Ein update auf diese Frage: möchten Sie vielleicht check out Laravel ist Autorisierung - Komponente. Scheint perfekt für Ihre Bedürfnisse!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Absolut! Es ist ein Ansatz, den ich auch selbst benutze.
Können Sie die aktuelle route in der Anfrage, und dann alle Parameter, etwa so:
Im Gegensatz zu smartman's (jetzt gelöschte) Antwort, diese nicht entstehen, andere finden die Abfrage, ob Sie bereits abgerufen, das Modell über die route–Modell verbindlich.
Route::get('bookings/{booking}');
, dann Holen diebooking
parameter ergeben würde der Wert von was auch immer gebunden an die{booking}
token.$booking
als einer Instanz und der Zugriff der in Zusammenhang mit der Funktionowner()
zum abrufen deruser_id
Attribut. EDIT: Oder sind Sie nur auf der Durchreise die Instanz als Wert?route('param')
Arbeit in L5.3 abrufen der gebundenen Modell? Für einige Grund, es ist mir nur die Strecke slug auf die Aktualisierung meiner app zu L5.3.. Es war in Ordnung arbeiten im L5.2Route::resource('activity','ActivityController');
und innerhalb derauthorize()
Methode, die ich nurreturn Gate::allows('update-activity', $this->route('activity'));
. Und es ist nicht verbindlich, das Modell aber den integer-Wert deractivity
id.Activity
in einer controller-action.Um add-on zu Martin Bohne's Antwort, können Sie den Zugriff auf die gebundene Instanz mit nur
route($param)
:Hinweis: Dies funktioniert in Laravel 5.1. Ich habe nicht getestet auf älteren Versionen.
Sobald Sie haben Ihre ausdrückliche Bindung (https://laravel.com/docs/5.5/routing#route-model-binding) können Sie tatsächlich Holen Sie sich Ihr Modell direkt mit $this.
Sogar sauberer!