Zoeken…
Impliciete binding
Laravel lost automatisch Eloquent-modellen op die zijn gedefinieerd in routes of controlleracties waarvan de variabelenamen overeenkomen met de naam van een routesegment. Bijvoorbeeld:
Route::get('api/users/{user}', function (App\User $user) {
return $user->email;
});
Aangezien de in de route gedefinieerde gebruikersvariabele Eloquent $ in dit voorbeeld overeenkomt met het segment {user} in de URI van de route, injecteert Laravel automatisch de modelinstantie met een ID die overeenkomt met de overeenkomstige waarde uit de verzoek-URI. Als er geen overeenkomend modelinstantie in de database wordt gevonden, wordt automatisch een HTTP-antwoord 404 gegenereerd.
Als de tabelnaam van het model uit meerdere woorden is samengesteld, moet de invoervariabele in kleine letters zijn om het impliciete model bindend te maken;
Als de gebruiker bijvoorbeeld een bepaalde actie kan uitvoeren en we willen deze actie openen, is de route:
Route::get('api/useractions/{useraction}', function (App\UserAction $useraction) {
return $useraction->description;
});
Expliciete binding
Om een expliciete binding te registreren, gebruikt u de modelmethode van de router om de klasse voor een bepaalde parameter op te geven. U moet uw expliciete modelbindingen definiëren in de opstartmethode van de klasse RouteServiceProvider
public function boot()
{
parent::boot();
Route::model('user', App\User::class);
}
Vervolgens kunnen we een route definiëren die de parameter {user} bevat.
$router->get('profile/{user}', function(App\User $user) {
});
Omdat we alle {user}
-parameters aan het App\User
model hebben gebonden, wordt een User-instantie in de route geïnjecteerd. Dus, bijvoorbeeld, een verzoek om profile/1
zal de User-instantie uit de database injecteren die een ID van 1 heeft .
Als er geen overeenkomend modelinstantie in de database wordt gevonden, wordt automatisch een HTTP- antwoord 404 gegenereerd.