Table de matières
Installation Laravel
- Installation des outils pour Laravel
- Créer un projet Laravel
- Structure du projet
- Configuration Laravel
Les bases Laravel
Le Routage
Dernière mise à jour : 17/06/2022
Dans ce chapitre, vous allez apprendre à définir les routes (les différents URL) de votre application web en Laravel
Routage de base
Les routes Laravel les plus basiques acceptent un URI et une fermeture, fournissant une méthode très simple et expressive pour définir les routes et le comportement sans fichiers de configuration de routage compliqués :
use Illuminate\Support\Facades\Route;
Route::get('/greeting', function () {
return 'Hello World';
});
Les fichiers de routage par défaut
Toutes les routes Laravel sont définies dans vos fichiers de route, qui se trouvent dans le répertoire routes
. Ces fichiers sont automatiquement chargés par le fichier App\Providers\RouteServiceProvider
. Le fichier r
outes/web.php
définit les itinéraires qui sont destinés à votre interface Web. Ces routes sont affectées au groupe web middleware, qui fournit des fonctionnalités telles que l'état de session et la protection CSRF. Les routes dans routes/api.php
sont sans état et sont affectées au groupe api middleware.
Pour la plupart des applications, vous commencerez par définir des routes dans votre fichier routes/web.php. Les routes définis dans routes/web.php
sont accessibles en saisissant l'URL de la route défini dans votre navigateur. Par exemple, vous pouvez accéder à la route suivante en naviguant vers http://example.com/user
dans votre navigateur :
use App\Http\Controllers\UserController;
Route::get('/user', [UserController::class, 'index']);
Méthodes de routeur disponibles
Le routeur vous permet d'enregistrer des routes qui répondent à n'importe quel verbe HTTP :
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
Parfois, vous devrez peut-être enregistrer une route qui répond à plusieurs verbes HTTP. Vous pouvez le faire en utilisant la méthode match
. Ou, vous pouvez même enregistrer une route qui répond à tous les verbes HTTP en utilisant la méthode any:
Route::match(['get', 'post'], '/', function () {
//
});
Route::any('/', function () {
//
});
Protection CSRF
N'oubliez pas que tous les formulaires HTML pointant vers des routes POST, PUT, PATCH ou DELETE définis dans le fichier web des routes, doivent inclure un champ de jeton CSRF. A défaut, la demande sera rejetée. Vous pouvez en savoir plus sur la protection CSRF dans le chapitre sur CSRF :
<form method="POST" action="/profile">
@csrf
...
</form>
Paramètres des routes
Paramètres requis
Parfois, vous devrez capturer des segments de l'URL dans votre route. Par exemple, vous devrez peut-être capturer l'ID d'un utilisateur à partir de l'URL. Vous pouvez le faire en définissant les paramètres de route :
Route::get('/user/{id}', function ($id) {
return 'User '.$id;
});
Vous pouvez définir autant de paramètres de route que requis par votre route :
Route::get('/posts/{post}/comments/{comment}', function ($postId, $commentId) {
//
});
Les paramètres de route sont toujours entourés d'accolades {} et doivent être composés de caractères alphabétiques. Les traits de soulignement ( _) sont également acceptables dans les noms de paramètre de route. Les paramètres de route sont injectés dans les rappels(callbacks)/contrôleurs de route en fonction de leur ordre - les noms des arguments de rappel(callbacks)/contrôleur de route n'ont pas d'importance.
Paramètres et injection de dépendance
Si votre route a des dépendances que vous aimeriez que le conteneur de service Laravel injecte automatiquement dans le rappel de votre route, vous devez lister vos paramètres de route après vos dépendances :
use Illuminate\Http\Request;
Route::get('/user/{id}', function (Request $request, $id) {
return 'User '.$id;
});
Paramètres facultatifs
Parfois, vous devrez peut-être spécifier un paramètre de route qui n'est pas toujours présent dans l'URI. Vous pouvez le faire en plaçant une marque ? après le nom du paramètre. Assurez-vous de donner une valeur par défaut à la variable correspondante de la route :
Route::get('/user/{name?}', function ($name = null) {
return $name;
});
Route::get('/user/{name?}', function ($name = 'John') {
return $name;
});
Routes nommés
Les routes nommées permettent la génération pratique d'URL ou de redirections pour des routes spécifiques. Vous pouvez spécifier un nom pour une route en enchaînant la méthode name
sur la définition de route :
Route::get('/user/profile', function () {
//
})->name('profile');
Vous pouvez également spécifier des noms de route pour les actions du contrôleur :
Route::get(
'/user/profile',
[UserProfileController::class, 'show']
)->name('profile');
Attention : Les noms de route doivent toujours être uniques.
Génération d'URL vers des routes nommées
Une fois que vous avez attribué un nom à une route donnée, vous pouvez utiliser le nom de la route lors de la génération d'URL ou de redirections via les fonctions de Laravel route et d' redirectassistance :
// Géneration d'URLs...
$url = route('profile');
// Géneration de redirection...
return redirect()->route('profile');
Si la route nommée définit des paramètres, vous pouvez passer les paramètres comme deuxième argument à la route fonction. Les paramètres donnés seront automatiquement insérés dans l'URL générée dans leurs positions correctes :
Route::get('/user/{id}/profile', function ($id) {
//
})->name('profile');$url = route('profile', ['id' => 1]);
Si vous transmettez des paramètres supplémentaires dans le tableau, ces paires clé/valeur seront automatiquement ajoutées à la chaîne de requête de l'URL générée :
Route::get('/user/{id}/profile', function ($id) {
//
})->name('profile');
$url = route('profile', ['id' => 1, 'photos' => 'yes']);
// /user/1/profile?photos=yes
Groupes de routes
Les groupes de routage vous permettent de partager des attributs de routage, tels que le middleware, sur un grand nombre de routes sans avoir à définir ces attributs sur chaque routage individuel.
Les groupes imbriqués tentent de "fusionner" intelligemment les attributs avec leur groupe parent. Le middleware et les conditions sont fusionnés tandis que les noms et les préfixes sont ajoutés. Les délimiteurs d'espace de noms et les barres obliques dans les préfixes d'URI sont automatiquement ajoutés, le cas échéant.
Middleware
Pour affecter un middleware à toutes les routes d'un groupe, vous pouvez utiliser la méthode middleware avant de définir le groupe. Les middleware (intergiciels) sont exécutés dans l'ordre dans lequel ils sont répertoriés dans le tableau :
Route::middleware(['first', 'second'])->group(function () {
Route::get('/', function () {
// utilise first & second middleware...
});
Route::get('/user/profile', function () {
// utilise first & second middleware...
});
});
Contrôleurs
Si un groupe de routes utilise toutes le même contrôleur , vous pouvez utiliser la méthode controller pour définir le contrôleur commun pour toutes les routes du groupe. Ensuite, lors de la définition des routes, il vous suffit de fournir la méthode de contrôleur qu'ils invoquent :
use App\Http\Controllers\PostController;
Route::controller(PostController::class)->group(function () {
Route::get('/posts/{id}', 'show');
Route::post('/posts', 'store');
});
Routes de sous-domaine
Les groupes de routage peuvent également être utilisés pour gérer le routage de sous-domaine. Les sous-domaines peuvent se voir attribuer des paramètres de route, tout comme les URI de route, ce qui vous permet de capturer une partie du sous-domaine pour l'utiliser dans votre route ou votre contrôleur. Le sous-domaine peut être spécifié en appelant la méthode domain
avant de définir le groupe :
Route::domain('{account}.example.com')->group(function () {
Route::get('user/{id}', function ($account, $id) {
//
});
});
Afin de vous assurer que vos routes de sous-domaine sont accessibles, vous devez enregistrer les routes de sous-domaine avant d'enregistrer les routes de domaine racine. Cela empêchera les routes de domaine racine d'écraser les routes de sous-domaine qui ont le même chemin d'URI.
Préfixes de routes
La méthode prefix
peut être utilisée pour préfixer chaque route du groupe avec un URI donné. Par exemple, vous pouvez préfixer tous les URI de route au sein du groupe avec admin
:
Route::prefix('admin')->group(function () {
Route::get('/users', function () {
// Matches "/admin/users" URL
});
});
il y a bien des multiples options sur la façon dont vous pourez gérer les routes dans votre application en allant dans la documentation officielle de Laravel.
Dans le chapitre suivant nous allons voir une brève explication sur l'architecture MVC qui est utilisée par la plupart des frameworks avant de se lancer en profondeur.
Soyez au courant des dernières tendances
Abonnez-vous pour obtenir les meilleurs articles, tutoriels, astuces et informations !