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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow