Model binding

Voir la vidéo
Description Sommaire

Dans ce tutoriel, nous allons apprendre à utiliser le modèle binding dans Laravel qui permet de pre-récupérer les entités provenant de la base de données dans les actions de nos routes. C'est un concept intéressant qui peut vous faire gagner du temps.

Le modèle binding nous permet de lier un paramètre de route à un modèle de base de données. Par exemple, supposons que nous avons une route qui prend un ID et un slug comme paramètres.

function show (string $slug, string $id) {
    // On récupère l'article à partir de son ID
    $post = Post::findOrFail($id);
    // ...
}

Cette logique sera très souvent présente dans le code de nos controller et Laravel peut faire cela dynamiquement en liant en récupérant automatiquement la donnée à partir de la clef primaire.

Pour utiliser le modèle binding, vous devez d'abord changer le nommage de vos paramètres de route. Dans notre exemple, nous allons changer l'ID en post.

Route::get('/blog/{slug}-{post}', [PostController::class, 'show'])

Ensuite, vous devez renommer le paramètre $post dans votre controller en lui donnant un type correspondant au model que vous souhaitez utiliser.

function show (string $slug, Post $post) {
    // $post sera automatiquement récupéré par Laravel
    // ...
}

Si vous essayez d'accéder à un article qui n'existe pas, Laravel renverra une exception qui se traduira par une erreur 404.

Vous pouvez également choisir le champs à utiliser lors de la résolution de ce model binding dans le cas où vous ne souhaitez pas utiliser la clef primaire.

Route::get('/blog/{post:slug}', [PostController::class, 'show'])
Publié
Technologies utilisées
Auteur :
Grafikart
Partager