Créer et utiliser un contrôleur Laravel
Sommaire
- 1- Objectifs
- 2- Qu’est-ce qu’un contrôleur ?
- 3- Rôle d'un contrôleur
- 4- Créer un contrôleur sous Laravel
- 4.1- Créer un simple contrôleur vierge
- 4.2- Créer un contrôleur complet de ressources avec les méthodes CRUD
- 5- Structure d'un contrôleur Laravel
- 6- Liaison avec les routes
- 6.1- Liaison avec les routes
- 6.2- Route nommée
- 7- Déplacer le code des fonctions de rappel des routes
- 7.1.1- Sommaire du cours Laravel
Créer et utiliser un contrôleur Laravel
-
Objectifs
- Etre capable d’utiliser les contrôleurs Laravel
-
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. En pratique, dans une application Laravel, l’utilisation de contrôleurs permet de libérer les routes du code qu’elles contiennent dans leurs fonctions de rappel.
- Un controller est une classe qui va contenir différentes méthodes. Chaque méthode correspondant généralement à une opération (URL) de votre application.
- Un contrôleur est matérialisé par une classe et chacune de ses méthodes représente une action. Une action correspond généralement à une route.
- Les contrôleurs sont une autre fonctionnalité essentielle fournie par Laravel. Au lieu de définir la logique de demande de traitement sous la forme de fermetures dans les fichiers de route, il est possible d’organiser ce processus à l’aide des classes Controller.
- Un contrôleur est matérialisé par une classe et chacune de ses méthodes représente une action. Une action correspond généralement à une route.
- Au lieu de définir la logique de réponse aux différents requêtes dans les fichiers du Routing comme on a vu dans les exemples précédents, il est recommandé d’organiser ces comportements dans des Controllers.
- Les Controllers permettent de regrouper les logiques de réponse aux requêtes http reliées dans la même classe.
-
Rôle d’un contrôleur
- La tâche d’un contrôleur est de réceptionner 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 :
- 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
. - La forme complète de MVC est Model View Controller, qui sert à diriger le trafic entre les vues et les modèles.
- La tâche d’un contrôleur est de réceptionner une requête (qui a déjà été sélectionnée par une route) et de définir la réponse appropriée et la fournir au client.
-
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.
- Artisan, l’outil en ligne de commande fourni avec Laravel, permet de créer rapidement un fichier contenant la structure de base d’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
- Si tout se passe bien vous allez trouver le contrôleur ici :
- Dans l’exemple suivant nous nommerons notre controller ApprenantController.
- Retournez dans votre dossier app/Http/Controllers, vous y trouverez votre nouveau controller. Nous allons ensuite créer une nouvelle méthode à notre Class ApprenantController que l’on nommera « apprenants ».
- Maintenant nous devons faire le lien entre notre fichier web.php et notre Controller. Nous devons donc changer notre deuxième paramètre.
- Par défaut, Laravel va chercher le contrôleur dans app\Http\Controllers. Nous spécifions également après le
@
, que la fonction à appeler est apprenants(). -
Créer un contrôleur complet de ressources avec les méthodes CRUD
-
Structure d’un contrôleur Laravel
- Un contrôleur est une classe qui étend la classe de base Controller et dont chaque méthode publique représente généralement une action qui correspond à une route.
- Fichier app/Http/Controllers/ApprenantController.php
- Une méthode d’un contrôleur retourne une réponse, exactement comme dans les fonctions de rappels à propos des routes.
- Dans l’exemple précédent, les méthodes apprenants et rechercher retournent une réponse sous la forme d’une vue , mais il aurait aussi bien pu s’agir chaîne de caractères ou d’un objet JSON.
-
Liaison avec les routes
-
Liaison avec les routes
- La figure suivante illustre 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 nom du contrôleur et le nom de la méthode séparés par
@
. - La syntaxe à utiliser est
NomDuController@action
sous forme d’une chaîne de caractères. -
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 :
- 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.
-
Déplacer le code des fonctions de rappel des routes
- Les routes sont généralement surchargées de code pour traiter les actions dans leurs fonctions de rappel.
- L’objectif est de les libérer de ce code pour obtenir un fichier de routes propre qui fait simplement le lien entre les URI de l’application et les actions à effectuer pour chacune de ces URI.
- Le fichier des routes routes/web.php est ainsi allégé, et devient un index des différentes URI avec leurs actions associées.
- Exemple de fichier de routes sans fonction de rappel
Par convention, les contrôleurs sont en notation Camel Case et terminent tous avec le mot Controller. Cela permet de les différencier des services et des modèles auxquels ils font référence.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ApprenantController extends Controller
{
public function apprenants() {
return view('/apprenants/index');
}
}
Route::get('/apprenants/index','App\Http\Controllers\ApprenantController@apprenants');
php artisan make:controller NomDeMonController --resource
<?php
class sharkController extends BaseController {
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store()
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param int $id
* @return Response
*/
public function update($id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return Response
*/
public function destroy($id)
{
//
}
}
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ApprenantController extends Controller
{
public function apprenants() {
return view('/apprenants/index');
}
public function show($id){
return view('apprenants.show', [
'apprenant' => Product::find($id)
]);
}
}
Route::get('apprenants', 'ApprenantController@apprenants');
Route::get('apprenants/{id}', 'ApprenantController@show');
Route::get('/', 'WelcomeController@index')->name('home');
Route::get('videos', 'VideoController@index');
Route::get('videos/creer', 'VideoController@create');
Route::post('videos/creer', 'VideoController@store');
Route::get('videos/{id}', 'VideoController@show');