Cikkek

Laravel köztes szoftver, hogyan működik

A Laravel köztes szoftver egy köztes alkalmazási réteg, amely beavatkozik a felhasználó kérése és az alkalmazás válasza közé.

Ez azt jelenti, hogy amikor a felhasználó (Laravel nézet) kérést intéz a szerverhez (Laravel vezérlő), a kérés a köztes szoftveren keresztül megy át. Így a köztes szoftver ellenőrizheti, hogy a kérés hitelesített-e vagy sem: 

  • ha a felhasználó kérése hitelesített, akkor a kérés elküldésre kerül a háttérrendszernek;
  • ha a felhasználó kérése nem hitelesített, a köztes szoftver átirányítja a felhasználót a bejelentkezési képernyőre.

Laravel lehetővé teszi defifejezze be és használjon további köztes szoftvereket a hitelesítés kivételével számos feladat végrehajtásához. 

A Laravel köztes szoftverek, például a hitelesítés és a CSRF-védelem a címtárban találhatók app/Http/Middleware .

Azt mondhatjuk tehát, hogy a köztes szoftver egy http kérés szűrő, amelyen keresztül lehetőség van a feltételek ellenőrzésére és a műveletek végrehajtására.

Köztes szoftver létrehozása

Új köztes szoftver létrehozásához a következő parancsot futtatjuk:

php artisan make:middleware <name-of-middleware>

Mi létrehozzuk a middleware és úgy hívjuk CheckAge, artisan a következőképpen válaszol nekünk:

A fenti ablak azt mutatja, hogy a köztes szoftver sikeresen létrejött a következő néven: CheckAge ".

Ha meg szeretné tudni, hogy a CheckAge köztes szoftver létrejött-e vagy sem, lépjen a projekthez az app/Http/Middleware mappában, és látni fogja az újonnan létrehozott fájlt.

Az újonnan létrehozott fájl a következő kóddal rendelkezik

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}

Használjon köztes szoftvert

A middleware használatához regisztrálnunk kell.

A Laravelben kétféle köztes szoftver létezik:

  • Middleware globale
  • Route Middleware

Il globális köztes szoftver végrehajtásra kerül az alkalmazás minden HTTP kérésére, míg a Route Middleware egy adott útvonalhoz lesz hozzárendelve. A Middleware-t a címen lehet regisztrálni app/Http/Kernel.php. Ez a fájl két tulajdonságot tartalmaz $middleware e $routeMiddleware . A $middleware tulajdonság a globális köztes szoftver és a tulajdonjog regisztrálására szolgál $routeMiddleware útvonal-specifikus köztes szoftver regisztrálására szolgál.

A globális köztes szoftver regisztrálásához sorolja fel az osztályt a $middleware tulajdonság végén.

protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

Az útvonal-specifikus köztes szoftver regisztrálásához adja hozzá a kulcsot és az értéket a $routeMiddleware tulajdonsághoz.

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];

Mi alkottunk CheckAge az előző példában. Most már regisztrálhatjuk ezt a köztes szoftver útvonal tulajdonságában. Az ilyen regisztráció kódja az alábbiakban látható.

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
    ];

Köztes szoftver paraméterei

A Middleware segítségével is átadhatunk paramétereket. 

Például, ha alkalmazásának különböző szerepei vannak, például felhasználói, rendszergazdája, kiemelt rendszergazdája stb. és a szerepkör alapján szeretné hitelesíteni a műveletet, ezt a paraméterek köztes szoftverrel történő átadásával teheti meg. 

Az általunk készített köztes szoftver a következő függvényt tartalmazza, és az argumentum után egyéni argumentumokat is átadhatunk $következő .

    public function handle($request, Closure $next)
    {
        return $next($request);
    }

Most próbáljuk meg beállítani a szerepkör paramétert egy új köztes szoftverre, amelyet a semmiből fogunk létrehozni, majd folytassuk a Role Middleware létrehozását a következő parancs futtatásával

Módosítsa a fogantyú módszerét az alábbiak szerint

<?php

namespace App\Http\Middleware;
use Closure;

class RoleMiddleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

hozzáadtuk a paramétert $role, a metóduson belül pedig a vonal echo hogy a kimenetbe írja be a szerep nevét.

Innovációs hírlevél
Ne maradjon le az innovációval kapcsolatos legfontosabb hírekről. Regisztráljon, hogy megkapja őket e-mailben.

Most regisztráljuk a RoleMiddleware köztes szoftvert egy adott útvonalhoz

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
    ];

Most, hogy teszteljük a köztes szoftvert a paraméterrel, létre kell hoznunk egy kérést és egy választ. A válasz szimulálásához hozzuk létre a vezérlőt, amelyet TestControllernek fogunk hívni

php artisan make:controller TestController --plain

az éppen végrehajtott parancs egy új vezérlőt hoz létre a mappában app/Http/TestController.php, és módosítsa a módszert index a vonallal echo "<br>Test Controller.";

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class TestController extends Controller {
   public function index() {
      echo "<br>Test Controller.";
   }
}

A válasz beállítása után a fájl szerkesztésével felépítjük a kérést routes.phphozzáadásával a route role

Route::get('role',[
   'middleware' => 'Role:editor',
   'uses' => 'TestController@index',
]);

ezen a ponton kipróbálhatjuk a példát az URL meglátogatásával http://localhost:8000/role

a böngészőben pedig a kettőt fogjuk látni echo

Role editor
Test Controller

Lezárható köztes szoftver

Il terminable Middleware végrehajt bizonyos feladatokat, miután a választ elküldte a böngészőnek. Ezt a módszerrel köztes szoftver létrehozásával érhetjük el fejezze be a köztes szoftverben. Il terminable Middleware regisztrálni kell a middleware globális. A módszer terminate két érvet fog kapni $kérelem e $válasz. 

A módszer Terminate a következő kódban látható módon kell létrehozni.

php artisan make:middleware TerminateMiddleware

Ha elkészült a köztes szoftver app/Http/Middleware/TerminateMiddleware.php módosítsuk a kódot az alábbiak szerint

<?php

namespace App\Http\Middleware;
use Closure;

class TerminateMiddleware {
   public function handle($request, Closure $next) {
      echo "Executing statements of handle method of TerminateMiddleware.";
      return $next($request);
   }
   
   public function terminate($request, $response) {
      echo "<br>Executing statements of terminate method of TerminateMiddleware.";
   }
}

ebben az esetben van egy módszerünk handle és egy módszer terminate a két paraméterrel $request e $response.

Most regisztráljuk a Middleware-t

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
        'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
    ];

Most létre kell hoznunk a vezérlőt a válasz szimulálásához

php artisan make:controller XYZController --plain

az osztály tartalmának módosítása

class XYZController extends Controller {
   public function index() {
      echo "<br>XYZ Controller.";
   }
}

Most szerkesztenünk kell a fájlt routes/web.php a kérés aktiválásához szükséges útvonalak hozzáadása

Route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'XYZController@index',
]);

ezen a ponton kipróbálhatjuk a példát az URL meglátogatásával http://localhost:8000/terminate

és a böngészőben a következő sorokat fogjuk látni

Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware

Ercole Palmeri

Ön is tetszik:

Innovációs hírlevél
Ne maradjon le az innovációval kapcsolatos legfontosabb hírekről. Regisztráljon, hogy megkapja őket e-mailben.

Friss cikkek

A színező oldalak előnyei gyerekeknek – a varázslatok világa minden korosztály számára

A finom motoros készségek színezéssel történő fejlesztése felkészíti a gyerekeket olyan összetettebb készségekre, mint az írás. Kiszínezni…

Május 2 2024

A jövő itt van: Hogyan forradalmasítja a hajózási ágazat a globális gazdaságot

A haditengerészeti szektor igazi világgazdasági hatalom, amely egy 150 milliárdos piac felé navigált...

Május 1 2024

A kiadók és az OpenAI megállapodásokat írnak alá a mesterséges intelligencia által feldolgozott információáramlás szabályozására

Múlt hétfőn a Financial Times bejelentette, hogy megállapodást köt az OpenAI-val. Az FT engedélyezi világszínvonalú újságírását…

30 április 2024

Online fizetés: Így fizethet örökké a streaming szolgáltatások

Emberek milliói fizetnek a streaming szolgáltatásokért, havi előfizetési díjat fizetve. Általános vélemény, hogy Ön…

29 április 2024