Skip to main content
  1. Aides-mémoires/
  2. Laravel/

Controllers

Définition
#

Un Controller est une classe responsable de traiter les requêtes HTTP. Il agit comme intermédiaire entre :

  • les routes
  • les modèles (Models)
  • les vues (Views) ou les réponses JSON

Son objectif est de séparer la logique métier de la définition des routes afin de rendre le projet plus organisé et maintenable.


Fonctionnement général
#

Flux d’une requête :

Client
Route
Controller
   ├── Appel des Models
   ├── Validation
   ├── Traitement métier
   └── Préparation de la réponse
Vue HTML ou JSON

Exemple :

Route::get('/users', [UserController::class, 'index']);
class UserController extends Controller
{
    public function index()
    {
        return User::all();
    }
}

Création d’un controller
#

Créer un controller simple :

php artisan make:controller UserController

Le fichier est créé dans :

app/
└── Http/
    └── Controllers/
        └── UserController.php

Les différents types de Controllers
#

Laravel permet de générer plusieurs types de controllers adaptés à différents besoins.


1. Controller classique
#

Commande :

php artisan make:controller UserController

Structure :

class UserController extends Controller
{
    public function index()
    {

    }

    public function show($id)
    {

    }
}

Utilisation
#

  • plusieurs méthodes
  • logique variée
  • plusieurs routes

Exemple :

Route::get('/users', [UserController::class, 'index']);
Route::get('/users/{id}', [UserController::class, 'show']);

2. Resource Controller
#

Commande :

php artisan make:controller UserController --resource

Laravel génère automatiquement les 7 méthodes CRUD.

class UserController extends Controller
{
    public function index() {}

    public function create() {}

    public function store(Request $request) {}

    public function show(User $user) {}

    public function edit(User $user) {}

    public function update(Request $request, User $user) {}

    public function destroy(User $user) {}
}

Route associée :

Route::resource('users', UserController::class);

Cette seule ligne crée toutes les routes CRUD.

MéthodeURLAction
GET/usersindex
GET/users/createcreate
POST/usersstore
GET/users/{user}show
GET/users/{user}/editedit
PUT/PATCH/users/{user}update
DELETE/users/{user}destroy

Utilisation :

Applications web classiques utilisant des vues.


3. API Resource Controller
#

Commande :

php artisan make:controller Api/UserController --api

ou

php artisan make:controller UserController --api

Différence :

Les méthodes create() et edit() sont supprimées car une API ne retourne pas de formulaires HTML.

Méthodes générées :

index()
store()
show()
update()
destroy()

Route :

Route::apiResource('users', UserController::class);

Routes créées :

MéthodeURL
GET/users
POST/users
GET/users/{user}
PUT/PATCH/users/{user}
DELETE/users/{user}

Utilisation :

API REST.


4. Invokable Controller
#

Un Invokable Controller possède une seule méthode :

__invoke()

Commande :

php artisan make:controller ProfileController --invokable

Résultat :

class ProfileController extends Controller
{
    public function __invoke()
    {
        //
    }
}

Route :

Route::get('/profile', ProfileController::class);

Aucune méthode n’est précisée.

Utilisation :

Une seule action :

  • accueil
  • tableau de bord
  • page contact
  • génération de PDF
  • export Excel

Avantages
#

  • très simple
  • une responsabilité unique
  • facile à tester

5. Singleton Resource Controller
#

Introduit pour représenter une ressource unique appartenant à un contexte, sans identifiant dans l’URL.

Commande :

php artisan make:controller ProfileController --resource --singleton

Exemple :

Un utilisateur possède un seul profil.

Mauvaise URL :

/profiles/15

Bonne URL :

/profile

Routes :

Route::singleton('profile', ProfileController::class);

Routes générées :

MéthodeURLAction
GET/profileshow
GET/profile/editedit
PUT/PATCH/profileupdate

Il n’y a pas d’identifiant dans l’URL.

Cas d’utilisation
#

  • profil utilisateur
  • paramètres
  • panier courant
  • abonnement
  • tableau de bord personnel

6. API Singleton Controller
#

Version API du Singleton.

Commande :

php artisan make:controller ProfileController --singleton --api

Routes :

Route::apiSingleton('profile', ProfileController::class);

Routes générées :

MéthodeURL
GET/profile
PUT/PATCH/profile

Selon les options (--creatable ou --destroyable), Laravel peut également générer :

  • POST
  • DELETE

Utilisation :

API où une seule ressource existe.

Exemples :

/me
/settings
/profile
/preferences

Comparatif
#

TypePlusieurs actionsCRUDHTMLAPIIdentifiant
StandardOuiLibreOuiOuiOui
ResourceOuiOuiOuiPossibleOui
API ResourceOuiOuiNonOuiOui
InvokableNonNonOuiOuiSelon le besoin
SingletonOuiOuiOuiNonNon
API SingletonOuiOuiNonOuiNon

Les options Artisan
#

Créer un controller classique :

php artisan make:controller UserController

Controller Resource :

php artisan make:controller UserController --resource

Controller API :

php artisan make:controller UserController --api

Controller Invokable :

php artisan make:controller UserController --invokable

Controller Singleton :

php artisan make:controller UserController --resource --singleton

Controller API Singleton :

php artisan make:controller UserController --singleton --api

Bonnes pratiques
#

  • Un controller doit avoir une responsabilité claire.
  • Éviter d’y placer une logique métier complexe ; utiliser des Services ou des Actions dédiées.
  • Valider les données avec des Form Requests plutôt que directement dans le controller.
  • Exploiter l’Injection de dépendances pour les services.
  • Utiliser le Route Model Binding afin d’obtenir automatiquement les modèles.

Exemple :

public function show(User $user)
{
    return view('users.show', compact('user'));
}

Laravel récupère automatiquement l’utilisateur correspondant à l’identifiant présent dans l’URL.


Résumé
#

BesoinController recommandé
Plusieurs routes personnaliséesController classique
CRUD complet avec vuesResource Controller
API RESTAPI Resource Controller
Une seule actionInvokable Controller
Ressource unique (profil, paramètres…)Singleton Resource Controller
Ressource unique dans une APIAPI Singleton Controller