Framework PHP : LARAVEL
Les contrôleurs
Mouhamed DIOP - Ingénieur de Conception en Informatique [ESP]
Objectifs spécifiques
A l’issue de cette séquence, l’étudiant devrait :
• Savoir ce que représente un contrôleur
• Pouvoir créer des contrôleurs
• Pouvoir définir des actions au niveau d’un contrôleur
• Pouvoir associer des routes aux contrôleurs créés
Qu’est-ce qu’un contrôleur?
Les contrôleurs sont destinés à regrouper, au sein d’une même classe, la logique de
traitement des requêtes qui ont un certain lien
• Au lieu de définir toute la logique de gestion des requêtes en tant que closures dans les
fichiers de routage, il est possible de la répartir sur plusieurs contrôleurs
• L’idée c’est par exemple de regrouper la gestion de toutes les requêtes concernant les
clients (ajout, suppression, …) dans un contrôleur, puis celle des produits dans un autre
contrôleur, et ainsi de suite
• De ce fait, un contrôleur n’est rien d’autre qu’une classe capable de gérer un certain
nombre de requêtes
• Les contrôleurs sont stockés dans le répertoire app/Http/Controllers
• Tous les contrôleurs héritent du contrôleur de base de Laravel (Illuminate\Routing\Controller)
• Pas obligatoire, mais permet d’accéder à des fonctionnalités clé (middleware, etc.)
Création d’un contrôleur
La création d’un contrôleur se fait à l’aide de l’outil Artisan fourni par Laravel
• Pour ce faire, il suffit de se positionner dans la racine du projet et de taper la commande
php artisan make:controller nom_controleur
Exemple : php artisan make:controller ArticleController pour créer un contrôleur de
gestion des articles
• Une fois la commande exécutée, le contrôleur sera créé et placé dans le bon répertoire
• Pour l’exemple, le fichier ArticleController.php sera créé et placé dans le répertoire
app/Http/Controllers
NB : Même si on passe généralement par Artisan pour créer un contrôleur, il est tout à fait
possible de le créer manuellement (plus fastidieux quand même )
Création d’un contrôleur
Exemple d’un contrôleur de base créé par Artisan
• Il ne reste plus qu’à écrire les méthodes de gestion des requêtes
Ajout de méthodes de gestion à un contrôleur
Méthode gérant l’affichage de la liste des articles
• On peut ajouter autant de méthodes que de requêtes à gérer
Ajout de méthodes de gestion à un contrôleur
La vue article/index.blade.php pourrait ressembler à ceci
• La liste des articles ($articles) lui est transmise par le contrôleur (voir slide précédent)
Ajout de méthodes de gestion à un contrôleur
L’association de la méthode index du contrôleur avec une route se fait grâce au routage
• Il suffit d’éditer le fichier routes/web.php et d’y renseigner la nouvelle route
Ajout de méthodes de gestion à un contrôleur
Méthode gérant l’affichage d’un seul article
• Il faudra ajouter la méthode correspondante au niveau du contrôleur (ArticleController)
• Ensuite, définir une route d’accès à cette méthode
• Désormais, lorsqu'une requête correspond à l'URL de la route spécifiée, la méthode
show de la classe ArticleController sera exécutée. Les paramètres de la route seront
également transmis à la méthode.
Contrôleurs et espaces de noms
Lorsqu’un contrôleur ne se trouve pas directement dans le dossier de base des
contrôleurs, il faudra veiller à adapter le nom dans les routes
• Le chemin adapté devra être défini relativement à app/Http/Controllers
• Par exemple, si ArticleController se trouvait dans un sous dossier article
• Son chemin est alors app/Http/Controllers/article/ArticleController.php
• Le nom complet de sa classe devient App\Http\Controllers\Article\ArticleController
• Par conséquent, la définition de la route devient:
• Route::get('/articles', 'Article\ArticleController@index');
Contrôleurs à action unique
Il est possible de définir un contrôleur ne gérant qu'une seule action
• L’action sera définie sur le contrôleur par l’unique méthode __invoke
Contrôleurs à action unique
L’enregistrement d’une route pour un contrôleur à action unique ne nécessite pas la
spécification de la méthode
• Le seul nom du contrôleur va suffire
• Il est possible de générer un contrôleur à action unique avec Artisan
• Il suffit de spécifier l’option --invokable
php artisan make:controller ShowProfile --invokable
Contrôleurs de ressources
Il est possible de générer avec Artisan des contrôleurs capables de gérer toutes les
opérations (CRUD) sur une ressource
• Par exemple, il est possible de créer un contrôleur chargé de la gestion de toutes les
requêtes concernant les Produits (création, suppression, etc.)
• Il suffit de taper la commande suivante :
php artisan make:controller ProductController --resource
• Cette commande générera un contrôleur dans app/Http/Controllers/ProductController.php
• Ce contrôleur contiendra une méthode pour chacune des opérations possibles sur les
produits
Contrôleurs de ressources
Il est possible de définir une route d’accès à un contrôleur de ressources
• Elle se définit au niveau du fichier de routage (routes/web.php)
Route::resource('products', 'ProductController');
• Cette simple déclaration crée plusieurs routes pour gérer diverses actions sur la
ressource
• Le contrôleur généré aura déjà des squelettes de méthodes pour chacune de ses
actions
• Des commentaires sur les verbes HTTP et les URI accompagneront la définition des
méthodes générées
• Plusieurs routes de contrôleurs de ressources peuvent être déclarées en même temps
Route::resources( [ 'articles' => 'ArticleController', 'products' => 'ProductController' ] );
Contrôleurs de ressources
Extrait d’un contrôleur de ressources généré par Artisan
Contrôleurs de ressources
Par défaut, les actions gérées par les contrôleurs de ressources sont :
• index : chargée de l’affichage de la liste des éléments
• create : chargée de l’affichage du formulaire d’ajout d’un nouvel élément
• store : chargée de l’ajout d’un élément dans le système de stockage
• show : chargée de l’affichage de l’élément spécifié
• edit : chargée de l’affichage du formulaire de modification d’un élément
• update : chargée de la mise à jour de l’élément spécifié
• destroy : chargée de la suppression de l’élément spécifié
Contrôleurs de ressources
Exemple : Actions et routes générées pour le contrôleur de ressources ProductController
Verbe HTTP URI Action Nom de la Route
GET /products index products.index
GET /products/create create products.create
POST /products store products.store
GET /products/{product} show products.show
GET /products/{product}/edit edit products.edit
PUT/PATCH /products/{product} update products.update
DELETE /products/{product} destroy products.destroy
Liens utiles
Pour aller plus loin…
• https://laravel.com/docs/6.x/controllers
• https://laracasts.com/series/laravel-from-scratch-2018/episodes/6
• https://www.w3schools.in/laravel-tutorial/controllers/