une fonction qui permet de faire des traitement sépécifique avant l'exécution de la fonction associé à une route
Route:get("/ajouter") ----->Middleware("UnMiddleware")---->fonction associé
Exemple Authenfication
Route::get("/test",[TestController::class,'sayHello'])->name("testroute")->middleware('auth');
le middleware auth s'éxécute avant la fonction sayHello associé à la route /test si l'utilisateur est connecté le middleware laisse passé à l'exécution de la fonction sayHello sinon il affiche la page d'authentification
Syntaxe
namespace App\Http\Middleware;
use Closure;
class UnMiddleware
{
public function handle($request, Closure $next)
{
//les traitements
//...
//si tous est bien laisse passer
return $next($request);
}
}
$request: Représente l'objet de la requête HTTP entrante.( paramètres, les en-têtes, etc.)
$next: permet d'exécuter le middleware suivant (middleware('Middleware1')->middleware('Middleware2')->... ou la fonction associé à route
Exemple
Ecrire un middleware qui permet de detecter la langue d'un visiteur
Création du middleware
php artisan make:middelware LangueDetector
Http/Middleware/LangueDetector
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class LangueDetector
{
public function handle(Request $request, Closure $next): Response
{
//récupérer la langue du visituer
$lang=$request->getDefaultLocale();
// Définit la langue de l'application pour ce visiteur
app()->setLocale($lang);
// ou Stocke la langue dans la session
session(['langueDetected' => $lang]);
return $next($request);
}
}
Ajouter le middleware dans Kernel.php
Afin de rendre le middleware crée(LangueDetector) visible par la fonction middleware("nomMiddleware") on doit le déclarer dans le fichier kernel avec un nom
....
protected $middlewareAliases = [
'langDetector'=> \App\Http\Middleware\LangueDetector::class,
...
Web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TestController;
Route::get("/testlang",[TestController::class,"showLang"])->middleware("langDetector");
TestController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller
{
public function showLang()
{
return view("langView");
}
}
langView.blade.php.php
<div>
Hello your language is {{ app()->getLocale() }}
<br/>
Avec session : your language is : {{session('langueDetected')}}
</div>
@if(session('langueDetected')=='fr')
<nav>
<a href="">Bonjour :</a>
<a href=""> {{session('langueDetected')=='fr'? "Ajouter":"Add"}}</a>
<a href="">Afficher</a>
</nav>
@endif
@if(session('langueDetected')=='en')
<nav>
<a href="">Hello :</a>
<a href="">ADD</a>
<a href="">Show</a>
</nav>
@endif
Tester le middleware
http://127.0.0.1:8000/testlang
Résultat :selon la langue du visiteur
Hello your language is en
Avec session : your language is : en
Hello : ADD Show
passer de paramètre à un middleware
//...
Route::get("/testPermission",[TestController::class,"showTraiement"])->middleware("permission:ajouter,afficher,supprimer");
public function handle(Request $request, Closure $next,$permission1,$permission2,$permission3,...): Response
//....
"permission:ajouter,afficher,supprimer" est récupérer par les paramètres
$permission1,2,3,...
Exemple
php artisan make:middleware PermissionTest
PermissionTest
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class PermissionTest
{
public function handle(Request $request, Closure $next,$permission1,$permission2): Response
{
if($permission1=="ajouter" and $permission2=="afficher")
{
return $next($request);
}
return Response("Vous n'avez pas le droit d'ajouter et afficher");
}
}
Web.php
...
Route::get("/testPermissionA",function (){return "Ajouter et afficher";})->middleware("permission:ajouter,afficher");
Route::get("/testPermissionB",function (){return "Ajouter ";})->middleware("permission:ajouter,,");
....
Exécution
http://127.0.0.1:8000/testPermissionB
Résultat
Vous n'avez pas le droit d'ajouter et afficher
http://127.0.0.1:8000/testPermissionA
Résultat