Qu’est-ce qu’un contrôleur
Au lieu de définir toute la logique de traitement des requêtes dans des closures dans les fichiers de routes, vous pouvez organiser ce comportement dans des classes « contrôleurs ». Un contrôleur regroupe la logique de traitement des requêtes liées dans une seule classe. Par exemple, la classeUserController peut gérer toutes les requêtes concernant les utilisateurs (affichage, création, mise à jour, suppression, etc.).
Par défaut, les contrôleurs sont stockés dans le répertoire app/Http/Controllers.
Création d’un contrôleur
Pour générer rapidement un nouveau contrôleur, utilisez la commande Artisanmake:controller.
Tous les contrôleurs sont stockés par défaut dans app/Http/Controllers.
Contrôleur de base
Une classe de contrôleur peut avoir plusieurs méthodes publiques qui répondent aux requêtes HTTP entrantes.show de la classe App\Http\Controllers\UserController est appelée avec les paramètres de route en argument.
Les contrôleurs n’ont pas besoin d’hériter d’une classe de base. Toutefois, il peut être utile d’hériter d’une classe de base commune contenant des méthodes partagées par tous les contrôleurs.
Contrôleurs à action unique
Si l’action d’un contrôleur est particulièrement complexe, il peut être pratique de dédier toute la classe à cette unique action. Définissez pour cela une méthode__invoke dans le contrôleur.
--invokable de la commande Artisan make:controller génère un contrôleur invocable.
Contrôleurs de ressource
Si l’on considère chaque modèle Eloquent comme une « ressource », il est courant d’exécuter les mêmes opérations (CRUD) sur chacune. Le routage de ressource Laravel affecte les routes typiques create / read / update / delete à un contrôleur en une seule ligne. L’option--resource de la commande Artisan make:controller crée rapidement un contrôleur gérant ces actions.
app/Http/Controllers/PhotoController.php avec un stub pour chaque opération de ressource.
Enregistrez ensuite une route de ressource pointant vers le contrôleur.
| Verbe HTTP | URI | Action | Nom de la route |
|---|---|---|---|
| GET | /photos | index | photos.index |
| GET | /photos/create | create | photos.create |
| POST | /photos | store | photos.store |
| GET | /photos/{photo} | show | photos.show |
| GET | /photos/{photo}/edit | edit | photos.edit |
| PUT/PATCH | /photos/{photo} | update | photos.update |
| DELETE | /photos/{photo} | destroy | photos.destroy |
La commande
php artisan route:list affiche un aperçu rapide des routes de l’application.Routes de ressource partielles
Lors de la déclaration d’une route de ressource, vous pouvez restreindre le sous-ensemble d’actions gérées par le contrôleur.Routes de ressource API
Pour une API, on veut souvent exclure les routes qui affichent des templates HTML (create, edit).
La méthode apiResource exclut automatiquement ces deux routes.
Injection de dépendances
Injection dans le constructeur
Le conteneur de services Laravel est utilisé pour résoudre les dépendances de tous les contrôleurs. Vous pouvez donc typer les dépendances requises dans le constructeur. Elles seront résolues automatiquement et injectées dans l’instance.Injection dans la méthode
En plus du constructeur, vous pouvez également typer des dépendances dans les méthodes. Un cas courant est l’injection d’une instanceIlluminate\Http\Request.
Illuminate\Http\Request tout en accédant au paramètre id.
Prochaines étapes
Routage
Revenez sur la définition des routes et leur lien avec les contrôleurs.