To znamená, že keď používateľ (pohľad Laravel) zadá požiadavku na server (radič Laravel), požiadavka prejde cez middleware. Týmto spôsobom môže middleware skontrolovať, či je požiadavka overená alebo nie:
Laravel vám to umožňuje defidokončiť a použiť ďalší middleware na vykonávanie rôznych úloh okrem autentifikácie.
Middleware Laravel, ako je autentifikácia a ochrana CSRF, sa nachádzajú v adresári app/Http/Middleware .
Dá sa teda povedať, že middleware je http filter požiadaviek, cez ktorý je možné overovať podmienky a vykonávať akcie.
Na vytvorenie nového middlewaru spustíme nasledujúci príkaz:
php artisan make:middleware <name-of-middleware>
Vytvárame middleware
a voláme to CheckAge
, artisan
nám odpovie takto:
Vyššie uvedené okno ukazuje, že middleware bol úspešne vytvorený s názvom “ CheckAge ".
Ak chcete zistiť, či je middleware CheckAge vytvorený alebo nie, prejdite do projektu v priečinku app/Http/Middleware a uvidíte novovytvorený súbor
Novovytvorený súbor má nasledujúci kód
<?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);
}
}
Aby sme mohli používať middleware, musíme ho zaregistrovať.
V Laravel existujú dva typy middlewaru:
Middleware globale
Route Middleware
Il globálny middleware sa vykoná pri každej požiadavke HTTP z aplikácie, pričom Middleware trasy budú priradené ku konkrétnej ceste. Middleware je možné zaregistrovať na app/Http/Kernel.php. Tento súbor obsahuje dve vlastnosti $middleware e $routeMiddleware . Vlastnosť $middleware sa používa na registráciu globálneho midlvéru a vlastníctva $routeMiddleware sa používa na registráciu middleware špecifického pre trasu.
Ak chcete zaregistrovať globálny middleware, uveďte triedu na konci vlastnosti $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,
];
Ak chcete zaregistrovať middleware špecifický pre trasu, pridajte kľúč a hodnotu do vlastnosti $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,
];
Vytvorili sme CheckAge v predchádzajúcom príklade. Teraz to môžeme zaregistrovať vo vlastnosti middleware route. Kód takejto registrácie je uvedený nižšie.
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,
];
Parametre môžeme odovzdať aj pomocou Middleware.
Napríklad, ak má vaša aplikácia rôzne roly, ako je používateľ, správca, supersprávca atď. a chcete overiť akciu na základe roly, môžete to urobiť odovzdaním parametrov middlevéru.
Middleware, ktorý sme vytvorili, obsahuje nasledujúcu funkciu a za argumentom môžeme odovzdať vlastné argumenty $ďalší .
public function handle($request, Closure $next)
{
return $next($request);
}
Teraz skúsme nastaviť parameter role na nový middleware, ktorý sa chystáme vytvoriť od začiatku, a potom pokračujte v vytváraní rolového Middleware spustením nasledujúceho príkazu
Upravte metódu rukoväte nasledovne
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
pridali sme parameter $role
a vo vnútri metódy riadok echo
napísať výstup názov roly.
Teraz poďme zaregistrovať middleware RoleMiddleware pre konkrétnu cestu
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,
];
Teraz, aby sme otestovali middleware s parametrom, musíme vytvoriť požiadavku a odpoveď. Aby sme simulovali odozvu, vytvorme ovládač, ktorý budeme nazývať TestController
php artisan make:controller TestController --plain
práve vykonaný príkaz vytvorí v priečinku nový ovládač app/Http/TestController.php
a zmeňte metódu index
s linkou 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.";
}
}
Po nastavení odpovede zostavíme požiadavku úpravou súboru routes.php
pridaním route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
v tomto bode môžeme vyskúšať príklad návštevou adresy URL http://localhost:8000/role
a v prehliadači uvidíme dve echo
Role editor
Test Controller
Il terminable Middleware
vykonáva niektoré úlohy po odoslaní odpovede do prehliadača. To sa dá dosiahnuť vytvorením middlewaru s touto metódou ukončiť v middleware. Il terminable Middleware
musí byť zaregistrovaný u middleware
globálne. Metóda terminate
dostane dva argumenty $žiadosť e $response.
Metóda Terminate
musí byť vytvorený tak, ako je uvedené v nasledujúcom kóde.
php artisan make:middleware TerminateMiddleware
Akonáhle je vytvorený middleware app/Http/Middleware/TerminateMiddleware.php
upravme kód nasledovne
<?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.";
}
}
v tomto prípade máme metódu handle
a spôsob terminate
s dvoma parametrami $request
e $response
.
Teraz poďme zaregistrovať Middleware
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,
];
Teraz musíme vytvoriť ovládač na simuláciu odozvy
php artisan make:controller XYZController --plain
úprava obsahu triedy
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
Teraz musíme súbor upraviť routes/web.php
pridanie trás potrebných na aktiváciu požiadavky
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
v tomto bode môžeme vyskúšať príklad návštevou adresy URL http://localhost:8000/terminate
a v prehliadači uvidíme nasledujúce riadky
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Môže sa vám tiež páčiť:
Rozvíjanie jemnej motoriky pomocou vyfarbovania pripravuje deti na zložitejšie zručnosti, ako je písanie. Na farbenie…
Námorný sektor je skutočnou globálnou ekonomickou veľmocou, ktorá smerovala k 150 miliardovému trhu...
Minulý pondelok Financial Times oznámili dohodu s OpenAI. FT licencuje svoju žurnalistiku svetovej triedy…
Milióny ľudí platia za streamovacie služby a platia mesačné predplatné. Je bežný názor, že si…