Laravel
Models Migration Relation
Introduction,istallation Strucutre,model,migration Migration,Models,Relation
Les Relations
BelongsTo HasOne HasMany BelongsToMany HasManyThrough
Exemples des Relations
Relations:oneToMany,ManyToMany... Relations:Exemples
Exercices
Exercice 1 Exercice 2
Controllers Views Routes
Routes,Controller,Model,view CRUD: Etudiant CRUD: Car CRUD,Recherche: Book
Validation
Exemple :Projets
Api:Laravel +React
Middleware

Seeders & Factories

Authenfication
Layouts





Les middlewares

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

  Ajouter et afficher