
Nous avons parcouru le cycle complet d'une requête, de son arrivée à son traitement par les routes, en passant par la génération de réponses avec des vues optimisées par Blade. Grâce à ces connaissances, vous êtes déjà bien équipé pour créer un site web complet. Cependant, Laravel propose encore de nombreux outils puissants que je vais vous présenter.
Pour organiser efficacement votre code dans une application Laravel, il est essentiel de bien répartir les tâches. Dans les exemples précédents, j'ai renvoyé une vue directement depuis une route, mais cette pratique est rarement utilisée dans une application réelle (même si rien ne vous en empêche !). Les routes servent principalement de système d'aiguillage pour trier les requêtes entrantes.
Mais alors qui prend le relais ?
Ce sont les contrôleurs, le sujet de ce chapitre.
Nous allons également découvrir l'outil Artisan, la boîte à outils indispensable du développeur Laravel.
Artisan
Lorsque vous développez une application avec Laravel, vous devez accomplir diverses tâches, comme créer des classes, vérifier les routes, entre autres.
C'est là qu'intervient Artisan, votre compagnon indispensable. Artisan fonctionne en ligne de commande, directement depuis la console. Pour l'utiliser, placez-vous dans le répertoire racine de votre projet et exécutez la commande suivante :
php artisan
On obtient ainsi la liste de ses possibilités, en voici un extrait :
Nous verrons peu à peu les principales commandes disponibles. Il y en a une pour connaître les routes prévues dans le code. Voici ce que ça donne avec une nouvelle installation :
On sait que la seule route (pour les requêtes web Http) au départ est celle-ci :
Route::get('/', function () {
return view('welcome');
});
Elle correspond à la première ligne de la liste.
Mais à quoi correspondent les autres routes ?
On a vu qu’il y a 2 fichiers de routes, en particulier, on a celui pour la console :Lui aussi comporte une route par défaut (en fait une commande Artisan) :
Artisan::command('inspire', function () {
$this->comment(Inspiring::quote());
})->purpose('Display an inspiring quote');
On verra qu'on peut ajouter d'autres dossiers, notamment pour les API.
Les contrôleurs
Rôle
La mission d'un contrôleur est de recevoir une requête, préalablement acheminée par une route, et de déterminer la réponse appropriée. Rien de plus, rien de moins. Voici une illustration de ce processus :
Constitution
Pour créer un contrôleur, nous allons utiliser Artisan. Dans la console, entrez cette commande :
php artisan make:controller WelcomeController
Si tout se passe bien, vous allez trouver le contrôleur ici :
Avec ce code :
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class WelcomeController extends Controller
{
//
}
Ajoutez la méthode index :
<?php
...
use Illuminate\View\View;
class WelcomeController extends Controller
{
public function index(): View
{
return view('welcome');
}
}
Analysons ce code :
- Espace de noms : le contrôleur est situé dans l'espace de noms
App\Http\Controllers
. - Héritage :
WelcomeController
hérite de la classeController
, qui se trouve dans le même répertoire. Cette classe parente permet de factoriser des actions communes à tous les contrôleurs. - Méthode
index
: cette méthode renvoie une vue, en l'occurrence la vuewelcome
que nous avons déjà mentionnée. Ainsi, lorsque cette méthode est appelée, elle retourne la vuewelcome
au client.
Liaison avec les routes
À présent, la question qu’on peut se poser est : comment s’effectue la liaison entre les routes et les contrôleurs ?
Ouvrez le fichier des routes et entrez ce code (et commentez ou supprimez la route de base) :
use App\Http\Controllers\WelcomeController;
Route::get('/', [WelcomeController::class, 'index']);
Maintenant avec l’URL de base, vous devez retrouver la page d’accueil de Laravel :
Voici une visualisation de la liaison entre la route et le contrôleur :
On voit qu’au niveau de la route, il suffit de désigner le contrôleur et la méthode dans un tableau.
Route nommée
De la même manière que nous pouvons nommer une route classique, on peut aussi donner un nom à une route qui pointe une méthode de contrôleur :
Route::get('/', [WelcomeController::class, 'index'])->name('home');
Si on utilise Artisan pour lister les routes (php artisan route:list) :
On voit bien que l’action est faite par le contrôleur avec précision de la méthode à utiliser. On trouve aussi le nom de la route (home).
Utilisation d’un contrôleur
Voyons à présent un exemple pratique de mise en œuvre d’un contrôleur. On va conserver notre exemple avec les articles, mais désormais traité avec un contrôleur. On conserve le même template et les mêmes vues :
On va créer un contrôleur (entraînez-vous à utiliser Artisan) pour les articles :
<?php
namespace App\Http\Controllers;
use Illuminate\View\View;
class ArticleController extends Controller
{
public function show($n): View
{
return view('article')->with('numero', $n);
}
}
Dans ce contrôleur, on a une méthode show chargée de générer la vue. Il ne nous reste plus qu’à créer la route :
use App\Http\Controllers\ArticleController;
Route::get('article/{n}', [ArticleController::class, 'show'])->where('n', '[0-9]+');
Voici une illustration du fonctionnement avec ce contrôleur :
Notez qu’on pourrait utiliser la méthode « magique » pour la transmission du paramètre à la vue :
return view('article')->withNumero($n);
En résumé
- Les contrôleurs : ils reçoivent les requêtes filtrées par les routes et fournissent une réponse appropriée au client.
- Artisan : cet outil permet, entre autres, de créer facilement des contrôleurs via la ligne de commande.
- Appel des méthodes : il est simple d'appeler une méthode de contrôleur à partir d'une route.
- Nommage des routes : vous pouvez nommer une route pour qu'elle pointe vers une méthode spécifique d'un contrôleur.
Par bestmomo
Aucun commentaire