0% ont trouvé ce document utile (0 vote)
15 vues10 pages

Routage avancé dans Laravel 02_routage

Transféré par

maindpositif
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
15 vues10 pages

Routage avancé dans Laravel 02_routage

Transféré par

maindpositif
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

02 - LARAVEL – ROUTAGE TP2

Gérer des routes plus complexes

1. Créer un nouveau projet Laravel « composer create-project laravel/laravel 02_routage »


2. Ouvrez-le dans Visual Studio Code
3. Par défaut, dans le fichier « [Link] », j’ai la route racine :
Route::get('/', function () {
return view('welcome');
});

4. Si on une application CRUD de gestion de livres par exemple, on aurai besoin d’avoir les routes suivantes :
• Afficher les livres
• Afficher le formulaire d’ajout
• Ajouter des livres (POST)
• Afficher le formulaire d’édition des livres
• Editer un livre (PUT / PATCH)
• Supprimer un livre (DELETE)
5. Alors pour afficher un livre « book » on aura besoin de créer un contrôleur « BookController » qu’on passera
au « Route » comme paramètre
6. Pour créer le contrôleur, on affiche le terminal et dans le dossier du projet « 02_routage » et on tape la
commande ARTISAN suivant :

Remarque : le drapeau « -r » permet juste de créer le contrôleur

7. Et si on développe le dossier « app/http/Controllers », on remarque que notre contrôleur a été créé avec
chacune des méthodes (index, create, store, show, edit, update et destroy)
8. On retourne dans le fichier « [Link] » et on crée un « Route » comme suit :

Route::resource('book', 'App\Http\Controllers\BookController');

9. On retourne dans la console et on affiche la liste des routes existants en tapant la commande ARTISAN
suivante :

10. On aura comme résultat affiché :

11. Pour expliquer c’est similaire à ceci :

Page 1 / 10
12. On peut chainer avec une fonction pour spécifier exactement les actions qu’on veut.
13. Par exemple, pour exclure l’action « destroy », on peut écrire :

Route::resource('book', 'App\Http\Controllers\BookController')->except(['destroy']);

14. Et si on retourne dans notre liste en tapant la commande ARTISAN « php artisan route:list », on verra que
toutes les actions ont été mappé sauf l’action « destroy ». Le résultat est le suivant :

15. De la même façon, on peut retirer aussi « edit » et « update ». La « Route » sera :

Route::resource('book', 'App\Http\Controllers\BookController')->except(['destroy',
'edit', 'update']);

16. Et le résultat de la liste sera :

17. L’inverse de la fonction « except » est « only » et ça s’écrit comme suit :

Route::resource('book', 'App\Http\Controllers\BookController')->only(['destroy', 'edit',


'update']);

18. Le résultat dans ce cas est le suivant :

Page 2 / 10
19. On peut aussi, au travers notre façade, gérer nos routes suivant les « Middlewares ». Pour cela, on va utiliser
la méthode « group » à laquelle je passe un tableau de middlewares. Le « Route » sera :

Route::group(['middleware' => ['auth', 'admin']], function(){


Route::resource('book', 'App\Http\Controllers\BookController');
});

20. En tapant la commande « php artisan route:list -v », le résultat sera :

21. On peut ajouter un niveau de profondeur. Par exemple dans le « Route principal » les routes définies sont
affecté par le middleware « auth » et à l’intérieur je définis un autre « Route » qui sera affecté par le
middleware « admin ». La « Route » sera comme suit :

Route::group(['middleware' => ['auth']], function(){


Route::resource('book', 'App\Http\Controllers\BookController');

Page 3 / 10
Route::group(['middleware' => ['admin']], function(){
Route::resource('admin', 'App\Http\Controllers\AdminController');
});
});

22. Le « Route » à l’intérieur sera affecté par les middlewares « admin » et « auth » car il est à l’intérieur de
l’autre.

23. Mais pour cela, on doit d’abord créer le contrôleur « AdminController » avec la commande artisan suivante :

24. En réaffichant la liste des « Routes », on aura comme résultat :

25. On voit que les routes de type « admin » qui ont le contrôleur « AdminController », il bénéficie des
middlewares « auth » et « admin » par contre le contrôleur « BookController », il bénéficie seulement du
middleware « auth »

26. Pour préciser les choses afin que ça ne rentre pas en conflit avec d’autres Routes, j’aurai besoin de préciser
un préfixe. Alors pour les URI « book », je vais préciser que ça soit « gestion/book ». Pour faire ça, on va
définir un préfixe après le middleware en modifiant le « Route » comme suit :

Route::group(
[
'middleware' => ['auth'],
'prefix' => 'gestion'
],

Page 4 / 10
function(){
Route::resource('book', 'App\Http\Controllers\BookController');

Route::group(['middleware' => ['admin']], function(){


Route::resource('admin', 'App\Http\Controllers\AdminController');
});
});

27. Si je reviens dans ma liste de « Routes », je vois que le préfixe a été mis en place.

28. Si je fais sortir le Route « admin » du Route « auth » je vais voir que le Route « admin » n’a plus le préfixe
« gestion »

Route::group(
[
'middleware' => ['auth'],
'prefix' => 'gestion'
],

function(){
Route::resource('book', 'App\Http\Controllers\BookController');
});

Route::group(['middleware' => ['admin']], function(){


Route::resource('admin', 'App\Http\Controllers\AdminController');
});

29. Résultat :

Page 5 / 10
30. On peut aussi avoir besoin d’organiser nos contrôleurs. Dans ce cas les « namespaces » changent et on doit
aussi changer le chemin de l’emplacement des contrôleurs dans les Routes. Par exemple, si on met le
contrôleur « BookController » dans un dossier comme suit :

31. On doit changer son « namespace » comme suit :

namespace App\Http\Controllers\Book;

32. Et puisque le contrôleur « BookController » hérite de « Controller » on doit ajouter la clause suivante pour le
reconnaitre :

use \App\Http\Controllers\Controller;

33. Et aussi modifier le Route qui l’utilise. La aussi, on a une méthode appelée « namespace » dans laquelle je
peux préciser le nom du dossier où se trouve le contrôleur.

Route::group(
[
'middleware' => ['auth'],
'prefix' => 'gestion',
'namespace' => 'Book'
],

function(){
Route::resource('book', '\App\Http\Controllers\Book\BookController');
});

Route::group(['middleware' => ['admin']], function(){


Route::resource('admin', '\App\Http\Controllers\AdminController');
});

Page 6 / 10
34. La liste des routes est toujours la suivante :

35. Pour plus d’organisation, je veux que le nom aussi par exemple « [Link] » soit génèré comme
« [Link] ». Pour cela, on a l’argument « as » pour qui on passe « gestion » comme suit :

Route::group(
[
'middleware' => ['auth'],
'prefix' => 'gestion',
'namespace' => 'Book',
'as' => 'gestion.'
],

function(){
Route::resource('book', '\App\Http\Controllers\Book\BookController');
});

Route::group(['middleware' => ['admin']], function(){


Route::resource('admin', '\App\Http\Controllers\AdminController');
});

36. Résultat :

Page 7 / 10
37. Pour bien gérer nos fichiers, dans le fichier « [Link] », on peut rajouter des Routes
directement dans ce dernier. Pour cela :
• On va dans le dossier « routes »
• On crée un dossier « book »
• Dans ce dernier, on crée un fichier « [Link] »
• On modifie ce dernier comme suit :

<?php

use Illuminate\Support\Facades\Route;

Route::group(
[
'middleware' => ['auth'],
'prefix' => 'gestion',
'namespace' => 'Book',
'as' => 'gestion.'
],

function(){
Route::resource('book', '\App\Http\Controllers\Book\BookController');
});

38. Et on modifie le fichier « [Link] » comme suit :

<?php

namespace App\Providers;

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;

class RouteServiceProvider extends ServiceProvider


{

Page 8 / 10
/**
* The path to the "home" route for your application.
*
* Typically, users are redirected here after authentication.
*
* @var string
*/
public const HOME = '/home';

/**
* Define your route model bindings, pattern filters, and other route configuration.
*
* @return void
*/
public function boot()
{
$this->configureRateLimiting();

$this->routes(function () {
Route::middleware('api')
->prefix('api')
->group(base_path('routes/[Link]'));

Route::middleware('web')
->group(base_path('routes/[Link]'));

Route::middleware('web')
->group(base_path('routes//book/[Link]'));
});
}

/**
* Configure the rate limiters for the application.
*
* @return void
*/
protected function configureRateLimiting()
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
}
}

39. On réaffiche la liste des Routes et tout s’affiche comme avant :

Page 9 / 10
Page 10 / 10

Vous aimerez peut-être aussi