Гэта азначае, што калі карыстальнік (выгляд Laravel) робіць запыт на сервер (кантролер Laravel), запыт будзе праходзіць праз прамежкавае праграмнае забеспячэнне. Такім чынам прамежкавае праграмнае забеспячэнне можа праверыць, аўтэнтыфікаваны запыт ці не:
Laravel дазваляе вам defiзавяршыць і выкарыстоўваць дадатковае прамежкавае праграмнае забеспячэнне для выканання розных задач, акрамя аўтэнтыфікацыі.
Прамежкавае праграмнае забеспячэнне Laravel, такое як аўтэнтыфікацыя і абарона CSRF, знаходзіцца ў каталогу прыкладанне/Http/прамежкавае ПЗ .
Такім чынам, можна сказаць, што прамежкавае праграмнае забеспячэнне - гэта фільтр http-запытаў, праз які можна правяраць умовы і выконваць дзеянні.
Каб стварыць новае прамежкавае праграмнае забеспячэнне, мы запускаем наступную каманду:
php artisan make:middleware <name-of-middleware>
Мы ствараем middleware
і мы называем гэта CheckAge
, artisan
адкажа нам наступным чынам:
Акно вышэй паказвае, што прамежкавае праграмнае забеспячэнне было паспяхова створана з назвай " CheckAge ».
Каб даведацца, створана прамежкавае праграмнае забеспячэнне CheckAge, перайдзіце да праекта ў тэчцы app/Http/Middleware, і вы ўбачыце толькі што створаны файл
Нядаўна створаны файл мае наступны код
<?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);
}
}
Каб выкарыстоўваць прамежкавае праграмнае забеспячэнне, нам трэба яго зарэгістраваць.
У Laravel ёсць два тыпу прамежкавага праграмнага забеспячэння:
Middleware globale
Route Middleware
Il глабальнае прамежкавае праграмнае забеспячэнне будзе выконвацца на кожны HTTP-запыт ад прыкладання, у той час як Прамежкавае праграмнае забеспячэнне маршруту будзе прызначаны для пэўнага шляху. Прамежкавае праграмнае забеспячэнне можна зарэгістраваць па адрасе дадатак/Http/Kernel.php. Гэты файл змяшчае дзве ўласцівасці $прамежкавае праграмнае забеспячэнне e $routeMiddleware . Уласцівасць $middleware выкарыстоўваецца для рэгістрацыі глабальнага прамежкавага праграмнага забеспячэння і права ўласнасці $routeMiddleware выкарыстоўваецца для рэгістрацыі прамежкавага праграмнага забеспячэння для канкрэтнага маршруту.
Каб зарэгістраваць глабальнае прамежкавае праграмнае забеспячэнне, пералічыце клас у канцы ўласцівасці $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,
];
Каб зарэгістраваць прамежкавае праграмнае забеспячэнне для пэўнага маршруту, дадайце ключ і значэнне ва ўласцівасць $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,
];
Мы стварылі CheckAge у папярэднім прыкладзе. Цяпер мы можам зарэгістраваць гэта ва ўласцівасці маршруту прамежкавага праграмнага забеспячэння. Код для такой рэгістрацыі паказаны ніжэй.
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,
];
Мы таксама можам перадаваць параметры з дапамогай Middleware.
Напрыклад, калі ваша праграма мае розныя ролі, такія як карыстальнік, адміністратар, суперадміністратар і г.д. і вы хочаце праверыць сапраўднасць дзеяння на аснове ролі, вы можаце зрабіць гэта, перадаўшы параметры з дапамогай прамежкавага праграмнага забеспячэння.
Прамежкавае праграмнае забеспячэнне, якое мы стварылі, змяшчае наступную функцыю, і мы можам перадаваць карыстальніцкія аргументы пасля аргумента $наступны .
public function handle($request, Closure $next)
{
return $next($request);
}
Зараз давайце паспрабуем усталяваць параметр ролі для новага прамежкавага праграмнага забеспячэння, якое мы збіраемся стварыць з нуля, а затым пяройдзем да стварэння ролевага прамежкавага праграмнага забеспячэння, выканаўшы наступную каманду
Змяніце метад ручкі наступным чынам
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
мы дадалі параметр $role
, а ўнутры метаду радок echo
каб напісаць назву ролі.
Зараз давайце зарэгіструем прамежкавае праграмнае забеспячэнне RoleMiddleware для пэўнага шляху
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,
];
Цяпер, каб праверыць прамежкавае праграмнае забеспячэнне з параметрам, нам трэба стварыць запыт і адказ. Каб змадэляваць адказ, давайце створым кантролер, які мы назавем TestController
php artisan make:controller TestController --plain
толькі што выкананая каманда створыць новы кантролер у папцы app/Http/TestController.php
, і змяніць метад index
з лініяй 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.";
}
}
Пасля наладжвання адказу мы будуем запыт шляхам рэдагавання файла routes.php
шляхам дадання route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
на дадзены момант мы можам паспрабаваць прыклад, наведаўшы URL http://localhost:8000/role
і ў браўзеры мы ўбачым два echo
Role editor
Test Controller
Il terminable Middleware
выконвае некаторыя задачы пасля адпраўкі адказу ў браўзер. Гэта можа быць дасягнута шляхам стварэння прамежкавага праграмнага забеспячэння з метадам заканчваецца ў прамежкавым праграмным забеспячэнні. Il terminable Middleware
неабходна зарэгістравацца ў middleware
глабальны. Метад terminate
атрымае два аргументы $запыт e $адказ.
Метад Terminate
павінен быць створаны, як паказана ў наступным кодзе.
php artisan make:middleware TerminateMiddleware
Пасля стварэння прамежкавага праграмнага забеспячэння app/Http/Middleware/TerminateMiddleware.php
давайце зменім код наступным чынам
<?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.";
}
}
у гэтым выпадку ў нас ёсць метад handle
і метад terminate
з двума параметрамі $request
e $response
.
Зараз давайце зарэгіструем 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,
];
Цяпер нам трэба стварыць кантролер для мадэлявання адказу
php artisan make:controller XYZController --plain
змяненне зместу класа
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
Цяпер нам трэба адрэдагаваць файл routes/web.php
даданне маршрутаў, неабходных для актывацыі запыту
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
на дадзены момант мы можам паспрабаваць прыклад, наведаўшы URL http://localhost:8000/terminate
і ў браўзеры мы ўбачым наступныя радкі
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Вам таксама могуць спадабацца:
Ваенна-марскі сектар - гэта сапраўдная глабальная эканамічная сіла, якая перайшла да 150-мільярднага рынку...
У мінулы панядзелак Financial Times абвясціла аб здзелцы з OpenAI. FT ліцэнзуе сваю журналістыку сусветнага ўзроўню...
Мільёны людзей плацяць за струменевыя паслугі, плацячы штомесячную абаненцкую плату. Распаўсюджана меркаванне, што вы…
Coveware ад Veeam працягне прадастаўляць паслугі рэагавання на інцыдэнты кібервымагальніцтва. Coveware будзе прапаноўваць судова-медыцынскую экспертызу і магчымасці выпраўлення…