www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:158
www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587249039 Les contrôleurs 5 Nous avons expliqué le cycle d’une requête depuis son arrivée, son traitement par les routes et sa réponse avec des vues qui peuvent être améliorées par Blade. Avec tous ces éléments, vous pourriez réaliser un site web complet, mais Laravel offre encore de nombreux outils performants. Pour bien organiser son code dans une application Laravel, il faut savoir répartir les tâches. Dans les exemples précédents, j’ai renvoyé une vue à partir d’une route ; vous ne ferez jamais cela dans une application réelle (même si personne ne vous empêche de le faire !). Les routes sont juste un système d’aiguillage pour trier les requêtes qui arrivent. Mais alors qui s’occupe de la suite ? Eh bien, ce sont les contrôleurs, le sujet de ce chapitre. L’utilité des contrôleurs Rôle La tâche d’un contrôleur est de réceptionner une requête (qui a déjà été triée par une route) et de définir la réponse appropriée, rien de moins et rien de plus. Traitement de la requête par un contrôleur www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587249039 Première partie – Les bases de Laravel 40 Constitution Pour créer un contrôleur, nous allons utiliser Artisan, la boîte à outils de Laravel. Dans la console, entrez la commande suivante : php artisan make:controller WelcomeController Le contrôleur créé Voici le code du contrôleur créé : <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class WelcomeController extends Controller { // } Vous allez ajouter la méthode index : <?php ... class WelcomeController extends Controller { public function index() { return view('welcome'); } } Analysons un peu ce code : • on trouve en premier l’espace de nom ; • le contrôleur hérite de la classe Controller qui se trouve dans le même dossier et qui permet de factoriser des actions communes à tous les contrôleurs ; • on trouve enfin une méthode index qui renvoie la vue welcome dont nous avons déjà parlé. www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587249039 Chapitre 5. Les contrôleurs 41 Liaison avec les routes Comment s’effectue la liaison entre les routes et les contrôleurs ? Ouvrez le fichier des routes et entrez ce code : <?php Route::get('/', 'WelcomeController@index'); Maintenant, avec l’URL de base, vous devez retrouver la page d’accueil de Laravel. Page d’accueil Voici une visualisation de la liaison entre la route et le contrôleur. 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 celui de la méthode. Si vous êtes attentif au code, vous avez sans doute remarqué qu’au niveau de la route on ne spécifie pas l’espace de noms du contrôleur ; on peut légitimement se demander comment on le retrouve. Laravel nous simplifie la syntaxe en ajoutant automatiquement l’espace de noms. Si vous devez placer vos contrôleurs dans un autre espace de noms, il faut intervenir sur la variable $namespace dans le fichier App\Providers\ RouteServiceProvider : www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587249039 Première partie – Les bases de Laravel 42 <?php protected $namespace='App\Http\Controllers'; Cette valeur constitue la base de référence des espaces de noms. 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 vers une méthode de contrôleur : <?php Route::get('/', ['uses'=>'WelcomeController@index', 'as'=>'home']); Ici, on nomme home la route vers la méthode index du contrôleur WelcomeController pour l’URL de base. L’utilisation d’un contrôleur Voyons un exemple pratique de mise en œuvre d’un contrôleur. On conservera notre exemple avec les articles, mais maintenant traité avec un contrôleur. On conserve le même template et les mêmes vues. Le template et les vues On crée un contrôleur (entraînez-vous à utiliser Artisan) pour les articles : <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ArticleController extends Controller { public function show($n) { return view('article')->with('numero', $n); } } www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587249039 Chapitre 5. Les contrôleurs 43 Le dossier des contrôleurs Dans ce contrôleur, la méthode show est chargée de générer la vue. Il ne nous reste plus qu’à créer la route : <?php Route::get('article/{n}', 'ArticleController@show')->where('n', '[0-9]+'); Voici une illustration du fonctionnement avec un contrôleur. Les articles avec un contrôleur Notez qu’on pourrait utiliser la méthode « magique » pour la transmission du paramètre à la vue : <?php return view('article')->withNumero($n); En résumé • Les contrôleurs servent à réceptionner les requêtes triées par les routes et à fournir une réponse au client. www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587249039 Première partie – Les bases de Laravel • Artisan facilite la création d’un contrôleur. • Il est facile d’appeler une méthode de contrôleur à partir d’une route. • On peut nommer une route qui pointe vers une méthode de contrôleur. www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587249039 Les entrées 6 Dans bien des circonstances, le client envoie des informations au serveur. La situation la plus générale est celle d’un formulaire. Nous allons voir dans ce chapitre comment créer facilement un formulaire avec Laravel et réceptionner les entrées. Ce faisant, nous améliorerons notre compréhension du routage. Scénario et routes Nous allons envisager un petit scénario avec une demande de formulaire de la part du client, sa soumission et son traitement. Scénario On aura donc besoin de deux routes : • une pour la demande du formulaire avec une méthode get ; • une pour la soumission du formulaire avec une méthode post. On les crée dans le fichier app/route.php : www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587249039 Première partie – Les bases de Laravel 46 <?php Route::get('users', 'UsersController@getInfos'); Route::post('users', 'UsersController@postInfos'); Jusque-là, on avait vu seulement des routes avec le verbe get ; on a maintenant aussi une route avec le verbe post. Laravel autorise d’autres verbes comme put et delete, ou plusieurs verbes pour une même route avec match, ou même tous les verbes avec any. On a la même URL http://monsite.fr/users, mais selon le cas le verbe est soit get, soit post. Voici le scénario schématisé avec les URL. Les URL du scénario Le middleware Je parlerai plus en détail des middlewares dans un prochain chapitre. Pour le moment, on se contentera de savoir que c’est du code qui est activé à l’arrivée de la requête (ou à son départ) pour effectuer un traitement. C’est pratique pour arrêter par exemple directement la requête s’il y a un problème de sécurité. Laravel peut servir comme application web ou comme api. Dans le premier cas, on a besoin de gérer : • les cookies ; • une session ; • la protection CSRF (dont je parle plus loin dans ce chapitre). Regardez dans le fichier app/Http/Kernel.php : www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587249039 Chapitre 6. Les entrées 47 <?php protected $middlewareGroups=[ 'web'=>[ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ], 'api'=>[ 'throttle:60,1', ], ]; On trouve les deux middlewares de groupes web et api. On voit que, dans le premier cas, on active bien les cookies, les sessions et la vérification CSRF. Par défaut, toutes les routes que vous entrez dans le fichier app/Http/routes.php sont incluses dans le groupe web. Si vous regardez dans le provider app/Providers/ RouteServiceProvider.php, vous trouvez cette inclusion : <?php protected function mapWebRoutes(Router $router) { $router->group([ 'namespace' => $this->namespace, 'middleware' => 'web', ], function ($router) { require app_path('Http/routes.php'); }); Le formulaire Pour faire les choses correctement, nous allons prévoir un template resources/ views/template.blade.php : <!doctype html> <html lang="fr"> <head> <meta charset="UTF-8"> <body> @yield('contenu') </body> </html> Il faut également une vue resources/views/infos.blade.php qui utilise ce template : www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587249039 Première partie – Les bases de Laravel 48 @extends('template') @section('contenu') {!! Form::open(['url'=>'users']) !!} {!! Form::label('nom', 'Entrez votre nom : ') !!} {!! Form::text('nom') !!} {!! Form::submit('Envoyer !') !!} {!! Form::close() !!} @endsection Ce code mérite quelques explications. Pour créer un formulaire, il faut commencer par l’ouvrir : Form::open(['url'=>'users']) La sémantique est simple : on veut ouvrir (open) un formulaire (Form) et le faire pointer vers l’URL users. Le formulaire contient : • une étiquette (label) : Form::label('nom', 'Entrez votre nom : ') • un contrôle de type text qui se nomme nom : Form::text('nom') • un bouton de soumission (submit) avec le texte Envoyer ! : Form::submit('Envoyer !') Finalement, on ferme (close) le formulaire : Form::close() Le code généré est alors le suivant : <form method="POST" action="http://monsite.fr/users" accept-charset="UTF-8"> <input name="_token" type="hidden" value="pV1vWWdUqFDfYsBjKag43C3NvzbIC0lHtMnv9BpI"> <label for="nom">Entrez votre nom : </label> <input name="nom" type="text" id="nom"> <input type="submit" value="Envoyer !"> </form> www.bibliovox.com:Fondation Mohammed VI:2110057491:88834657:160.179.237.219:1587249039 Chapitre 6. Les entrées 49 Voici quelques remarques sur ce code : • la méthode par défaut est post ; on n’a pas eu besoin de le préciser ; • l’action est bien construite ; • il y a un contrôle caché (_token) destiné à la protection CSRF dont je parlerai plus loin ; • l’étiquette est bien créée avec son attribut for ; • le contrôle de texte est du bon type avec le bon nom. Il a en plus un id pour qu’il fonctionne avec son étiquette ; • le bouton de soumission a été généré avec son texte. Le résultat sera un formulaire sans fioriture. Le formulaire créé ! Si votre formulaire ne se génère pas, c’est que vous n’avez peut-être pas chargé le composant Laravelcollective\Html comme nous l’avons vu dans le chapitre
Documents similaires










-
31
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jan 10, 2022
- Catégorie Administration
- Langue French
- Taille du fichier 0.6918MB