Module M205: Développer en back-end
Manipulation des contrôleurs
Filière: Développement digital – option web full stack
Formateur: Othmane DAIF
Qu'est-ce qu'un contrôleur ?
Dans le modèle MVC (modèle-vue-contrôleur), le contrôleur contient la logique concernant les actions effectuées par
l'utilisateur.
Permet de libérer les routes du code qu'elles contiennent dans leurs fonctions de rappel.
Les contrôleurs sont destinés à regrouper la logique de traitement des demandes associée dans une seule classe.
Dans votre projet Laravel, ils sont stockés dans le répertoire app/Http/Controllers
2
Rôle d'un contrôleur
La tâche d'un contrôleur est de recevoir une requête (qui a déjà été sélectionnée par une route) et de définir la réponse
appropriée, rien de moins et rien de plus. Voici une illustration du processus :
Requête Requête
routes contrôleur
Réponse
3
Créer un contrôleur sous Laravel
Pour créer un contrôleur à partir de la fenêtre du terminal, ouvrez le terminal et changez le répertoire vers votre dossier racine
Laravel. Une fois que vous y êtes, vous pouvez exécuter l'une des commandes suivantes pour créer un contrôleur.
Créer un simple contrôleur vierge
Pour créer un contrôleur vous pouvez directement entrer la commande :
php artisan make:controller NomDeMonController
Exemple:
php artisan make:controller UserController
app
Console
Exceptions
Http
Controllers
[Link]
[Link]
4
Structure d'un contrôleur
Dans l'exemple précédent nous avons créer le controller UserController.
Le contrôleur créée est sous le dossier app/Http/Controllers
Ajoutons la méthode index au controlleur UserController :
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
//
public function index() {
return view("welcome");
}
}
5
Appel depuis la route
Maintenant nous devons faire le lien entre notre fichier [Link] et notre Controller.
Nous devons donc changer notre deuxième paramètre :
Route::get('/', [UserController::class, 'index']);
6
Utilisation des paramètres
Ajoutons à notre contrôleur la méthode get prenant en argument un paramètre $id:
class UserController extends Controller
{
public function get($id) {
return "page $id";
}
}
Ajoutons dans le fichier [Link] la route suivante:
Route::get('/get/{id}', [UserController::class, 'get']);
7
Contrôleurs à simple action
Si une action de contrôleur est particulièrement complexe, vous trouverez peut-être pratique de dédier une classe de contrôleur
entière à cette action unique. Pour ce faire, vous pouvez définir une seule méthode magique __invoke dans le contrôleur;
php artisan make:controller HomeController --invokable
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Handle the incoming request.
*/
public function __invoke(Request $request)
{
return "Bienvenue à la page home";
}
}
8
Route pour contrôleur invocable
Pour appeler ce type de contrôleur via la route, il suffit d'indiquer la classe du contrôleur sans évoquer une méthode
spécifique:
Route::get('/home', HomeController::class);
9
Contrôleur de ressources
1 Les contrôleurs de ressources Laravel fournissent les routes CRUD au contrôleur en une seule ligne de code.
Un contrôleur de ressources est utilisé pour créer un contrôleur qui gère toutes les requêtes http stockées par votre application
2
(get, post, update, delete …).
Pour commencer, nous pouvons utiliser l'option make:controller de la commande Artisan --resource pour créer rapidement un
3
contrôleur pour gérer ces actions :
php artisan make:controller PostController --resource
Cette commande générera un contrôleur sous app/Http/Controllers/[Link]. Le contrôleur contiendra une méthode
pour chacune des opérations de ressources disponibles.
10
Méthodes d'un contrôleur de ressources
La classe PostController créée a l'allure suivante:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostController extends Controller { /** Show form for editing */
public function edit($id) {
/** Display a listing */ // }
public function index() { // }
/** Update resource */
/** Show form for new */ public function update(Request $request, $id) { // }
public function create() { // }
/** Remove resource */
/** Store new resource */ public function destroy($id) { // }
public function store(Request $request) { // } }
/** Display resource */
public function show($id) { // }
11
Routes CRUD générées automatiquement
La méthode resource() de la classe Route est une fonction statique comme la méthode get() qui donne accès aux différentes routes que
nous pouvons utiliser dans un contrôleur.
Syntaxe de la méthode resource() :
Route::resource("/posts", PostController::class);
12
Table des routes CRUD
En excécutant la commande ci-après, on obtient:
php artisan route:list --except-vendor
Méthode
Méthode URI URI Nom Nom Action Action
GET|HEAD posts [Link] PostController@index
POST posts [Link] PostController@store
GET|HEAD posts/create [Link] PostController@create
GET|HEAD posts/{post} [Link] PostController@show
PUT|PATCH posts/{post} [Link] PostController@update
DELETE posts/{post} [Link] PostController@destroy
GET|HEAD posts/{post}/edit [Link] PostController@edit
13