Comprendre Laravel 5.4 : Les bases du routing

Afin d’avoir de gérer facilement et proprement les vues, Laravel propose un système de routing efficace.

Dans la version 5.4, le routing n’est plus dans le dossier « app/http/routes.php » mais dans « routes/web.php« , ce qui correspond à la version avec laquelle je travaille lors de la rédaction de cet article.

Avec notre site Laravel, toutes les requêtes pointent vers « index.php" du dossier « public« . On veut ajouter une page d’accueil personnalisé, on va ajouter une vue « home.php » dans le dossier « resources/views » puis référencer cette vue dans le fichier de routing « routes/web.php » :

<?php
 Route::get('/', function () { return view('home'); });

Ce code est interprété comme suit :

  • Route : Appel statique à la classe qui gère le système de route
  • get : vérifie avec la méthode http GET les paramètres
  • '/' : l’url comporte uniquement le nom de domaine

De cette façon, par défaut en arrivant sur « index.php » de notre site c’est la vue home qui sera chargée.

Bien évidemment, on va vouloir ajouter plusieurs vues à notre site, avec des paramètres différents selon ce qu’on souhaite réaliser. Ajoutons un routing supplémentaire :

On peut donc naviguer de la page index.php à la page 1, juste avec les paramètres présents dans l’url. Mais je voudrais par exemple configurer les routes pour avoir un paramètre de type numérique… Je peux créer un routing dynamique :

<?php 
Route::get('{n}', function($n) { return 'this is the page number ' .$n. ' !'; });

Le problème ici c’est que mon paramètre n’est pas protégé et qu’il accepte n’importe quelle donnée :/

http://localhost/laravel-test/public/3

http://localhost/laravel-test/public/wtf

Il va falloir protéger le type de données qui sera acceptée, dans ce cas on ne veut que des valeurs numériques :

<?php 
Route::get('{n}', function($n) { 
    return 'this is the page number ' .$n. ' !'; }
)->where('n', '[0-9]+');

Maintenant la page http://localhost/laravel-test/public/wtf affichera une erreur :

Tandis que la page http://localhost/laravel-test/public/5 fonctionnera correctement d’après notre règle :

 

Pour aller plus loin: https://laravel.com/docs/5.4/routing

 

 

Laisser un commentaire