Suche…


Implizite Bindung

Laravel löst automatisch Eloquent-Modelle auf, die in Routen oder Controller-Aktionen definiert sind, deren Variablennamen mit einem Routensegmentnamen übereinstimmen. Zum Beispiel:

Route::get('api/users/{user}', function (App\User $user) {
    return $user->email; 
});

Da die auf der Route definierte Eloquent-$ -Variable mit dem {user} -Segment in der URI der Route übereinstimmt, fügt Laravel in diesem Beispiel automatisch die Modellinstanz ein, deren ID mit dem entsprechenden Wert der Anforderungs-URI übereinstimmt. Wenn keine übereinstimmende Modellinstanz in der Datenbank gefunden wird, wird automatisch eine 404-HTTP-Antwort generiert.

Wenn der Tabellenname des Modells aus mehreren Wörtern besteht, muss die Eingabevariable aus Kleinbuchstaben bestehen, damit die implizite Modellbindung funktioniert.
Wenn der Benutzer beispielsweise eine Aktion ausführen kann und wir auf diese Aktion zugreifen möchten, lautet die Route folgendermaßen:

Route::get('api/useractions/{useraction}', function (App\UserAction $useraction) {
    return $useraction->description; 
});

Explizite Bindung

Verwenden Sie zum Registrieren einer expliziten Bindung die Modellmethode des Routers, um die Klasse für einen bestimmten Parameter anzugeben. Sie sollten Ihre expliziten Modellbindungen in der Boot-Methode der RouteServiceProvider-Klasse definieren

public function boot()
{
   parent::boot();

   Route::model('user', App\User::class);
}

Als Nächstes können wir eine Route definieren, die den Parameter {user} enthält.

$router->get('profile/{user}', function(App\User $user) {
  
});

Da wir alle {user} -Parameter an das App\User Modell gebunden haben, wird eine Benutzerinstanz in die Route eingefügt. So wird zum Beispiel bei einer Anfrage an profile/1 die Benutzerinstanz aus der Datenbank mit der ID 1 eingefügt .

Wenn keine übereinstimmende Modellinstanz in der Datenbank gefunden wird, wird automatisch eine 404-HTTP- Antwort generiert.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow