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 ID på 1 .
Om en matchande modellinstans inte hittas i databasen genereras ett 404 HTTP- svar automatiskt.