Laravel : l’erreur courante Target class does not exist dans les routes

Je continue ma petite série d’articles sur Laravel et dans ce tutoriel, je vais évoquer une erreur qui revient souvent chez les débutants. Ce n’est pas très compliqué, mais je vais essayer de vous faire gagner du temps pour la résoudre le plus vite possible. Cela vous permettra de passer plus rapidement à la suite pour le développement de votre application avec le framework Laravel.

Lorsque l’on commence à bien avancer son application Laravel, après avoir manipulé la ligne de commande pour les éléments de base, on peut ensuite passer aux routes sur lesquelles nos utilisateurs vont se balader. Vous avez déjà probablement créé votre base de données avec les migrations et utilisé les modèles pour gérer les relations.

Le fichier de routes dans Laravel

Si vous avez aussi suivi mon tutoriel sur l’authentification dans Laravel, votre fichier de route web.php devrait aller ressembler à quelque chose comme ça :

<?php

use Illuminate\Support\Facades\Route;

/*
|------------------------------------------
| Web Routes
|------------------------------------------
*/

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Maintenant, je vais comme d’habitude créer un contrôler pour mettre la logique de mon code, car Laravel est basé sur l’architecture MVC. Dans mon précédent article, j’avais donné comme exemple l’affichage d’une vue avec un contrôleur BlogController. Je vais le réutiliser ici. Si je souhaite afficher mon article de blog, je vais donc logiquement ajouter la route suivante dans mon fichier /routes/web.php :

Route::get('/blog/{id}', [BlogController::class, 'show'])->name('post.show');

Si j’appelle ma route dans un navigateur, j’obtiens alors directement l’erreur très courante qui est la suivante :

Illuminate \ Contracts \ Container \ BindingResolutionException
Target class [BlogController] does not exist.

Comment bien faire une route avec contrôleur dans web.php

Cette erreur Target class does not exist est vraiment très fréquente quand on commence à utiliser les routes de Laravel et rassurez vous, c’est vraiment très facile à résoudre. Deux solutions s’offrent à vous pour corriger cette erreur dans ce cas où Laravel n’arrive pas à trouver votre contrôleur. Dans un premier temps, vous pouvez alors faire la chose suivante :

Route::get('/blog/{id}', [\App\Http\Controllers\BlogController::class, 'show'])->name('post.show');

Cependant, ce n’est pas la solution que je préfère, car ce n’est pas la plus élégante et c’est un peu lourd. Si vous commencez à avoir énormément de routes dans votre Laravel, ce n’est pas très agréable à lire. L’autre solution est de déclarer directement la classe de votre controller directement dans l’entête de votre fichier de routes web.php avec cette ligne :

use App\Http\Controllers\BlogController;

Votre fichier de routes devrait alors finalement ressembler à quelque chose comme ça :

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\BlogController;

/*
|------------------------------------------
| Web Routes
|------------------------------------------
*/

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/blog/{id}', [BlogController::class, 'show'])->name('post.show');

C’est beaucoup plus optimisé et agréable à lire non ? Lorsque vous commencez à créer des routes avec un nouveau controller, pensez bien à le déclarer pour éviter cette erreur Target class does not exist.

Laisser un commentaire