Sök…


Implicit bindning

Laravel löser automatiskt Eloquent-modeller som definieras i rutter eller kontrolleråtgärder vars variabla namn matchar ett ruttsegmentnamn. Till exempel:

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

I det här exemplet, eftersom Eloquent $ användarvariabel definierad på rutten matchar segmentet {user} i ruttens URI, kommer Laravel automatiskt att injicera modellinstansen som har ett ID som matchar motsvarande värde från begäran URI. Om en matchande modellinstans inte hittas i databasen genereras ett 404 HTTP-svar automatiskt.

Om modellens tabellnamn är sammansatt av flera ord, för att göra den implicita modellbindningen fungerar, bör ingångsvariabeln vara alla små bokstäver;
Om användaren till exempel kan göra någon form av handling , och vi vill komma åt den här åtgärden, kommer rutten att vara:

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

Explicit bindande

För att registrera en tydlig bindning, använd routerns modellmetod för att specificera klassen för en given parameter. Du bör definiera dina tydliga modellbindningar i startmetoden i klassen RouteServiceProvider

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

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

Därefter kan vi definiera en rutt som innehåller {user} -parameter.

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

Eftersom vi har bundit alla {user} -parametrar till App\User {user} modellen kommer en {user} att injiceras i rutten. Så till exempel kommer en begäran om profile/1 att injicera användarinstansen från databasen som har ett ID1 .

Om en matchande modellinstans inte hittas i databasen genereras ett 404 HTTP- svar automatiskt.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow