Aceasta înseamnă că atunci când utilizatorul (vizualizarea Laravel) face o cerere către server (controlerul Laravel), cererea va trece prin middleware. În acest fel, middleware-ul poate verifica dacă cererea este autentificată sau nu:
Laravel îți permite defifinalizați și utilizați middleware suplimentar pentru a efectua o varietate de sarcini, cu excepția autentificării.
Middleware-urile Laravel, cum ar fi autentificarea și protecția CSRF, sunt localizate în director aplicație/Http/Middleware .
Prin urmare, putem spune că middleware-ul este un filtru de solicitare http, prin care este posibil să se verifice condițiile și să se efectueze acțiuni.
Pentru a crea un nou middleware, rulăm următoarea comandă:
php artisan make:middleware <name-of-middleware>
Noi creăm middleware
și o numim CheckAge
, artisan
ne va raspunde in felul urmator:
Fereastra de mai sus arată că middleware-ul a fost creat cu succes cu numele ” CheckAge ".
Pentru a vedea dacă middleware-ul CheckAge este sau nu creat, accesați proiectul în folderul aplicație/Http/Middleware și veți vedea fișierul nou creat
Fișierul nou creat are următorul cod
<?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);
}
}
Pentru a folosi middleware, trebuie să îl înregistrăm.
Există două tipuri de middleware în Laravel:
Middleware globale
Route Middleware
Il middleware global va fi executat la fiecare solicitare HTTP din aplicație, în timp ce Route Middleware va fi atribuit unei anumite căi. Middleware-ul poate fi înregistrat la app/Http/Kernel.php. Acest fișier conține două proprietăți $middleware e $routeMiddleware . Proprietatea $middleware este folosit pentru a înregistra middleware global și proprietate $routeMiddleware este folosit pentru a înregistra middleware specific rutei.
Pentru a înregistra middleware global, listați clasa la sfârșitul proprietății $middleware.
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,
];
Pentru a înregistra middleware specific rutei, adăugați cheia și valoarea proprietății $routeMiddleware.
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,
];
Noi am creat CheckAge în exemplul anterior. Acum putem înregistra acest lucru în proprietatea rutei middleware. Codul pentru o astfel de înregistrare este prezentat mai jos.
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,
];
Putem trece parametri și cu Middleware.
De exemplu, dacă aplicația dvs. are roluri diferite, cum ar fi utilizator, administrator, super admin etc. și doriți să autentificați acțiunea în funcție de rol, o puteți face trecând parametrii cu middleware-ul.
Middleware-ul pe care l-am creat conține următoarea funcție și putem trece argumente personalizate după argument $în continuare .
public function handle($request, Closure $next)
{
return $next($request);
}
Acum să încercăm să setăm parametrul rol la un nou middleware pe care îl vom crea de la zero, apoi să continuăm să creăm Role Middleware rulând următoarea comandă
Modificați metoda mânerului după cum urmează
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
am adaugat parametrul $role
, iar în interiorul metodei linia echo
pentru a scrie ieșirea numele rolului.
Acum să înregistrăm middleware-ul RoleMiddleware pentru o anumită cale
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,
];
Acum, pentru a testa middleware-ul cu parametrul, trebuie să creăm o cerere și un răspuns. Pentru a simula răspunsul, să creăm controlerul pe care îl vom numi TestController
php artisan make:controller TestController --plain
comanda tocmai executată va crea un nou controler în interiorul folderului app/Http/TestController.php
și schimbați metoda index
cu linia 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.";
}
}
După configurarea răspunsului, construim cererea prin editarea fișierului routes.php
prin adăugarea route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
în acest moment putem încerca exemplul vizitând adresa URL http://localhost:8000/role
iar în browser le vom vedea pe cele două echo
Role editor
Test Controller
Il terminable Middleware
efectuează unele sarcini după ce răspunsul este trimis către browser. Acest lucru poate fi realizat prin crearea unui middleware cu metoda termina în middleware. Il terminable Middleware
trebuie să fie înregistrat la middleware
global. Metoda terminate
va primi două argumente $ cerere e $răspuns.
Metoda Terminate
trebuie creat așa cum se arată în codul următor.
php artisan make:middleware TerminateMiddleware
Odată ce middleware-ul este creat app/Http/Middleware/TerminateMiddleware.php
să modificăm codul după cum urmează
<?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.";
}
}
în acest caz avem o metodă handle
si o metoda terminate
cu cei doi parametri $request
e $response
.
Acum să înregistrăm Middleware-ul
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,
];
Acum trebuie să creăm controlerul pentru a simula răspunsul
php artisan make:controller XYZController --plain
modificarea conținutului clasei
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
Acum trebuie să edităm fișierul routes/web.php
adăugarea rutelor necesare pentru a activa cererea
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
în acest moment putem încerca exemplul vizitând adresa URL http://localhost:8000/terminate
iar în browser vom vedea următoarele rânduri
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Ați putea, de asemenea, să vă placă:
Coveware de la Veeam va continua să ofere servicii de răspuns la incidente de extorcare cibernetică. Coveware va oferi capacități criminalistice și de remediere...
Întreținerea predictivă revoluționează sectorul petrolului și gazelor, cu o abordare inovatoare și proactivă a managementului uzinelor...
CMA din Marea Britanie a emis un avertisment cu privire la comportamentul Big Tech pe piața inteligenței artificiale. Acolo…
Decretul „Case verzi”, formulat de Uniunea Europeană pentru creșterea eficienței energetice a clădirilor, și-a încheiat procesul legislativ cu...