Introductie
Laravels impliciete route model binding resolveert Eloquent-modellen automatisch vanuit route-parameters, waardoor handmatige findOrFail()-aanroepen overbodig worden. In combinatie met scoped bindings voor geneste resources en resource controllers houdt dit routingcode beknopt, consistent en minder foutgevoelig.
Waarom
- Minder boilerplate: Geen handmatige
findOrFail()- offind()-aanroepen nodig, Laravel resolveert het model automatisch - Automatische 404-afhandeling: Als het model niet gevonden wordt, geeft Laravel een 404-response terug zonder extra code
- Afdwingen van parent-child-relaties: Scoped bindings zorgen ervoor dat geneste resources daadwerkelijk bij hun parent horen, wat ongeautoriseerde toegang voorkomt
- RESTful consistentie: Resource controllers dwingen standaard CRUD-naamgevingsconventies af in de hele applicatie
Geschikt voor
- Elke route die op een specifieke model-instantie werkt
- Geneste resource-routes (bijv.
/users/{user}/posts/{post}) - RESTful API's en CRUD-controllers
- Applicaties waar consistente URL-patronen de developer experience verbeteren
Minder geschikt voor
- Routes die aangepaste resolutielogica nodig hebben die verder gaat dan eenvoudige key-lookups
- Endpoints die niet op specifieke model-instanties werken
- Legacy-routes met niet-standaard parameternaamgeving
Voorbeelden
Impliciete route model binding
// Slecht: handmatige resolutie
public function show(int $id)
{
$post = Post::findOrFail($id);
}
// Goed: automatische resolutie met type-hinting
public function show(Post $post)
{
return view('posts.show', ['post' => $post]);
}
Scoped bindings voor geneste resources
Dwing parent-child-relaties automatisch af:
Route::get('/users/{user}/posts/{post}', function (User $user, Post $post) {
// $post wordt automatisch gescoped op $user
})->scopeBindings();
Gebruik resource controllers
Route::resource('posts', PostController::class);
Route::apiResource('api/posts', Api\PostController::class);