To znamená, že když uživatel (pohled Laravel) zadá požadavek na server (řadič Laravel), požadavek projde middleware. Tímto způsobem může middleware zkontrolovat, zda je požadavek ověřen nebo ne:
Laravel vám to umožňuje defidokončit a používat další middleware k provádění různých úloh kromě ověřování.
Middleware Laravel, jako je autentizace a CSRF ochrana, jsou umístěny v adresáři aplikace/Http/Middleware .
Můžeme tedy říci, že middleware je http filtr požadavků, přes který je možné ověřovat podmínky a provádět akce.
Pro vytvoření nového middlewaru spustíme následující příkaz:
php artisan make:middleware <name-of-middleware>
Vytváříme middleware
a říkáme tomu CheckAge
, artisan
nám odpoví následovně:
Výše uvedené okno ukazuje, že middleware byl úspěšně vytvořen s názvem “ CheckAge ".
Chcete-li zjistit, zda je middleware CheckAge vytvořen nebo ne, přejděte do projektu ve složce app/Http/Middleware a uvidíte nově vytvořený soubor
Nově vytvořený soubor má následující 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);
}
}
Abychom mohli používat middleware, musíme jej zaregistrovat.
V Laravelu existují dva typy middlewaru:
Middleware globale
Route Middleware
Il globální middleware budou provedeny při každém požadavku HTTP z aplikace, zatímco Middleware trasy bude přiřazena ke konkrétní cestě. Middleware lze zaregistrovat na app/Http/Kernel.php. Tento soubor obsahuje dvě vlastnosti $middleware e $routeMiddleware . Vlastnost $middleware se používá k registraci globálního middlewaru a vlastnictví $routeMiddleware se používá k registraci middlewaru specifického pro trasu.
Chcete-li zaregistrovat globální middleware, uveďte třídu 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,
];
Chcete-li zaregistrovat middleware specifický pro trasu, přidejte klíč 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,
];
Vytvořili jsme CheckAge v předchozím příkladu. Nyní to můžeme zaregistrovat ve vlastnosti middlewaru route. Kód pro takovou registraci je uveden níže.
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,
];
Parametry můžeme předávat i pomocí Middleware.
Pokud má vaše aplikace například různé role, jako je uživatel, správce, superadministrátor atd. a chcete autentizovat akci na základě role, můžete to udělat předáním parametrů middlewaru.
Middleware, který jsme vytvořili, obsahuje následující funkci a po argumentu můžeme předat vlastní argumenty $další .
public function handle($request, Closure $next)
{
return $next($request);
}
Nyní zkusme nastavit parametr role na nový middleware, který se chystáme vytvořit od začátku, a poté pokračujte k vytvoření Role Middleware spuštěním následujícího příkazu
Upravte metodu rukojeti následovně
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
přidali jsme parametr $role
a uvnitř metody řádek echo
k napsání výstupu název role.
Nyní zaregistrujme middleware RoleMiddleware pro konkrétní 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,
];
Nyní, abychom otestovali middleware s parametrem, musíme vytvořit požadavek a odpověď. Pro simulaci odezvy vytvořte kontrolér, který budeme nazývat TestController
php artisan make:controller TestController --plain
právě provedený příkaz vytvoří ve složce nový ovladač app/Http/TestController.php
a změňte metodu 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í odpovědi sestavíme požadavek úpravou souboru routes.php
přidáním route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
v tomto okamžiku můžeme vyzkoušet příklad návštěvou URL http://localhost:8000/role
a v prohlížeči uvidíme ty dva echo
Role editor
Test Controller
Il terminable Middleware
provádí některé úkoly po odeslání odpovědi do prohlížeče. Toho lze dosáhnout vytvořením middlewaru s touto metodou ukončit v middlewaru. Il terminable Middleware
musí být registrován u middleware
globální. Metoda terminate
dostane dva argumenty $žádost e $response.
Metoda Terminate
musí být vytvořen, jak je znázorněno v následujícím kódu.
php artisan make:middleware TerminateMiddleware
Jakmile je vytvořen middleware app/Http/Middleware/TerminateMiddleware.php
upravíme kód následovně
<?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 případě máme metodu handle
a způsob terminate
se dvěma parametry $request
e $response
.
Nyní zaregistrujeme 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,
];
Nyní musíme vytvořit regulátor pro simulaci odezvy
php artisan make:controller XYZController --plain
úprava obsahu třídy
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
Nyní musíme soubor upravit routes/web.php
přidání tras potřebných k aktivaci požadavku
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
v tomto okamžiku můžeme vyzkoušet příklad návštěvou URL http://localhost:8000/terminate
a v prohlížeči uvidíme následující řádky
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Také by se vám mohlo líbit:
Rozvíjení jemné motoriky prostřednictvím vybarvování připravuje děti na složitější dovednosti, jako je psaní. Barvit…
Námořní sektor je skutečnou globální ekonomickou velmocí, která se dostala na 150miliardový trh...
Minulé pondělí Financial Times oznámily dohodu s OpenAI. FT licencuje svou prvotřídní žurnalistiku…
Miliony lidí platí za streamovací služby a platí měsíční předplatné. Je obecný názor, že jste…