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