Le Routing avec Laravel

1 - Définition

routes/web.php

exemple

Par défaut :

            
                Route::get('/', function () {
                return view('welcome');
                });
            
        

Route:: est une méthode en lien avec use Illuminate\Support\Facades\Route; que nous verrons plus tard get : Renvoi à une méthode. Il en existe plusieurs Méthodes de routeur disponibles Le routeur vous permet d'enregistrer des routes qui répondent à n'importe quel verbe HTTP : $uri = url, $callback = ce qui est executé Route::get($uri, $callback); // Pour les get dans l'URL exemple :

            
                use Illuminate\Http\Request;
                Route::get('/users', function (Request $request) {
                    // ...
                });
            
        

// Use appelle des fonctionnalités présentes dans d'autres fichiers. On les appelle pour les utiliser.

Concerne post, put, patch, delete
...
            
                Route::post($uri, $callback); // Pour les formulaire
                Route::put($uri, $callback);  // pour les update
                Route::patch($uri, $callback);
                Route::delete($uri, $callback); //Pour la suppression
                Route::options($uri, $callback);
            
        

Redirection des url : exemple de /here vers /there

            
                Route::redirect('/here', '/there');
            
        

2 - Liste des itinéraires

        
            php artisan route:list
        
    

3 - Paramètre des routes en get

        
            Route::get('/user/{id}', function ($id) {
                return 'User '.$id;
            });
        
    
<>On peut mettre autant de paramètres en get dans l'url que l'on souhaite
        
            Route::get('/posts/{post}/comments/{comment}', function ($postId, $commentId) {
                //
            });
        
    
        
            use Illuminate\Http\Request;

            Route::get('/user/{id}', function (Request $request, $id) {
                return 'User '.$id;
            });
        
    

Paramètres prédéfinis ou optionnels

            
                Route::get('/user/{name?}', function ($name = null) {
                    return $name;
                });

                Route::get('/user/{name?}', function ($name = 'John') {
                    return $name;
                });
            
        

filtres des paramètres

avec regex

                
                    Route::get('/user/{name}', function ($name) {
                        //
                    })->where('name', '[A-Za-z]+');

                    Route::get('/user/{id}', function ($id) {
                        //
                    })->where('id', '[0-9]+');

                    Route::get('/user/{id}/{name}', function ($id, $name) {
                        //
                    })->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
                
            

Avec les helpers

                
                    Route::get('/user/{id}/{name}', function ($id, $name) {
                        //
                    })->whereNumber('id')->whereAlpha('name');

                    Route::get('/user/{name}', function ($name) {
                        //
                    })->whereAlphaNumeric('name');

                    Route::get('/user/{id}', function ($id) {
                        //
                    })->whereUuid('id');

                    Route::get('/category/{category}', function ($category) {
                        //
                    })->whereIn('category', ['movie', 'song', 'painting']);
                
            

Contraintes générales

utilisation d'un pattern avec App\Providers\RouteServiceProviderclasse

                
                    /**
                    * Define your route model bindings, pattern filters, etc.
                    *
                    * @return void
                    */
                    public function boot()
                    {
                        Route::pattern('id', '[0-9]+');
                    }
                
            

Sera utilisé à chaque fois

                
                    Route::get('/user/{id}', function ($id) {
                        // Only executed if {id} is numeric...
                    });
                
            

3 - Nommage des routes

            
                Route::get('/user/profile', function () {
                    //
                })->name('profile');
            
        

Qui sont appelées par

            
                Route::get( '/user/profile',
                [UserProfileController::class, 'show']
                )->name('profile');
            
        

Tableau resources

            
                use App\Http\Controllers\PhotoController;
                Route::resource('photos', PhotoController::class);
            
        

on peut grouper également les resources, voire au chapitre suivant

            
                Route::resources([
                    'photos' => PhotoController::class,
                    'posts' => PostController::class,
                ]);
            
        

Tableau des resources

Only / except

            
                use App\Http\Controllers\PhotoController;

                Route::resource('photos', PhotoController::class)->only([
                    'index', 'show'
                ]);

                Route::resource('photos', PhotoController::class)->except([
                    'create', 'store', 'update', 'destroy'
                ]);
                
        

Compléter le tableau des ressources

            
                use App\Http\Controller\PhotoController;

                Route::get('/photos/popular', [PhotoController::class, 'popular']);
                Route::resource('photos', PhotoController::class);
            
        

Groupage des routes

Avec un middleware

            
                Route::middleware(['first', 'second'])->group(function () {
                    Route::get('/', function () {
                        // Uses first & second middleware...
                    });

                    Route::get('/user/profile', function () {
                        // Uses first & second middleware...
                    });
                });
            
        

Avec un controller

            
                use App\Http\Controllers\OrderController;

                Route::controller(OrderController::class)->group(function () {
                    Route::get('/orders/{id}', 'show');
                    Route::post('/orders', 'store');
                });
            
        

Prefix de route

            
                Route::prefix('admin')->group(function () {
                    Route::get('/users', function () {
                        // Matches The "/admin/users" URL
                    });
                });
            
        

Prefix de name

            
                Route::name('admin.')->group(function () {
                    Route::get('/users', function () {
                        // Route assigned name "admin.users"...
                    })->name('users');
                });
            
        

Cache

            
                php artisan route:cache
            
        
            
                php artisan route:clear