Nangangahulugan ito na kapag ang user (Laravel view) ay gumawa ng kahilingan sa server (Laravel controller), ang kahilingan ay dadaan sa middleware. Sa ganitong paraan masusuri ng middleware kung napatotohanan o hindi ang kahilingan:
Pinapayagan ka ng Laravel na defitapusin at gumamit ng karagdagang middleware upang magsagawa ng iba't ibang gawain maliban sa pagpapatunay.
Ang mga middleware ng Laravel, tulad ng pagpapatunay at proteksyon ng CSRF, ay matatagpuan sa direktoryo app/Http/Middleware .
Kaya't maaari nating sabihin na ang middleware ay isang filter ng kahilingan sa http, kung saan posible na i-verify ang mga kundisyon at magsagawa ng mga aksyon.
Upang lumikha ng isang bagong middleware pinapatakbo namin ang sumusunod na command:
php artisan make:middleware <name-of-middleware>
Lumilikha kami ng middleware
at tinatawag namin ito CheckAge
, artisan
sasagutin tayo ng mga sumusunod:
Ang window sa itaas ay nagpapakita na ang middleware ay matagumpay na nalikha na may pangalang ” CheckAge ".
Upang makita kung ang CheckAge middleware ay ginawa o hindi, pumunta sa proyekto sa app/Http/Middleware folder, at makikita mo ang bagong likhang file
Ang bagong likhang file ay may sumusunod na code
<?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);
}
}
Upang magamit ang middleware, kailangan nating irehistro ito.
Mayroong dalawang uri ng middleware sa Laravel:
Middleware globale
Route Middleware
Il pandaigdigang middleware ay isasagawa sa bawat kahilingan sa HTTP mula sa application, habang ang Ruta Middleware ay itatalaga sa isang tiyak na landas. Maaaring irehistro ang Middleware sa app/Http/Kernel.php. Ang file na ito ay naglalaman ng dalawang katangian $middleware e $routeMiddleware . Ang ari-arian ng $middleware ay ginagamit upang irehistro ang pandaigdigang middleware at pagmamay-ari $routeMiddleware ay ginagamit upang magrehistro ng middleware na partikular sa ruta.
Para irehistro ang pandaigdigang middleware, ilista ang klase sa dulo ng $middleware property.
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,
];
Upang irehistro ang middleware na partikular sa ruta, idagdag ang susi at halaga sa ari-arian ng $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,
];
Nilikha namin CheckAge sa nakaraang halimbawa. Maaari na nating irehistro ito sa property ng middleware route. Ang code para sa naturang pagpaparehistro ay ipinapakita sa ibaba.
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,
];
Maaari rin kaming magpasa ng mga parameter gamit ang Middleware.
Halimbawa, kung ang iyong application ay may iba't ibang tungkulin tulad ng user, admin, super admin atbp. at gusto mong patunayan ang aksyon batay sa tungkulin, magagawa mo ito sa pamamagitan ng pagpasa sa mga parameter gamit ang middleware.
Ang middleware na ginawa namin ay naglalaman ng sumusunod na function, at maaari naming ipasa ang mga custom na argumento pagkatapos ng argumento $susunod .
public function handle($request, Closure $next)
{
return $next($request);
}
Ngayon subukan nating itakda ang parameter ng papel sa isang bagong middleware na gagawin natin mula sa simula, pagkatapos ay magpatuloy upang lumikha ng Role Middleware sa pamamagitan ng pagpapatakbo ng sumusunod na command
Baguhin ang paraan ng paghawak tulad ng sumusunod
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
idinagdag namin ang parameter $role
, at sa loob ng pamamaraan ang linya echo
upang isulat ang output ang pangalan ng tungkulin.
Ngayon, irehistro natin ang RoleMiddleware middleware para sa isang partikular na landas
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,
];
Ngayon upang subukan ang middleware gamit ang parameter, kailangan naming lumikha ng isang kahilingan at isang tugon. Para gayahin ang tugon, gawin natin ang controller na tatawagin nating TestController
php artisan make:controller TestController --plain
ang utos na kakatupad lang ay lilikha ng bagong controller sa loob ng folder app/Http/TestController.php
, at baguhin ang paraan index
kasama ang linya 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.";
}
}
Pagkatapos i-set up ang tugon, binubuo namin ang kahilingan sa pamamagitan ng pag-edit ng file routes.php
sa pamamagitan ng pagdaragdag ng route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
sa puntong ito maaari nating subukan ang halimbawa sa pamamagitan ng pagbisita sa URL http://localhost:8000/role
at sa browser makikita natin ang dalawa echo
Role editor
Test Controller
Il terminable Middleware
gumaganap ng ilang gawain pagkatapos maipadala ang tugon sa browser. Ito ay maaaring makamit sa pamamagitan ng paglikha ng isang middleware na may pamamaraan wakasan sa middleware. Il terminable Middleware
dapat nakarehistro sa middleware
global. Ang paraan terminate
tatanggap ng dalawang argumento $request e $tugon.
Ang paraan Terminate
dapat gawin tulad ng ipinapakita sa sumusunod na code.
php artisan make:middleware TerminateMiddleware
Kapag nalikha na ang middleware app/Http/Middleware/TerminateMiddleware.php
baguhin natin ang code tulad ng sumusunod
<?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.";
}
}
sa kasong ito mayroon kaming isang pamamaraan handle
at isang pamamaraan terminate
kasama ang dalawang parameter $request
e $response
.
Ngayon, irehistro natin ang 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,
];
Ngayon kailangan nating lumikha ng controller upang gayahin ang tugon
php artisan make:controller XYZController --plain
pagbabago ng nilalaman ng klase
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
Ngayon kailangan nating i-edit ang file routes/web.php
pagdaragdag ng mga rutang kailangan para i-activate ang kahilingan
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
sa puntong ito maaari nating subukan ang halimbawa sa pamamagitan ng pagbisita sa URL http://localhost:8000/terminate
at sa browser makikita natin ang mga sumusunod na linya
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Maaari mo ring gusto:
Noong nakaraang Lunes, inihayag ng Financial Times ang isang deal sa OpenAI. Nilisensyahan ng FT ang world-class na pamamahayag nito...
Milyun-milyong tao ang nagbabayad para sa mga serbisyo ng streaming, na nagbabayad ng buwanang bayad sa subscription. Karaniwang opinyon na ikaw ay…
Ang Coveware ng Veeam ay patuloy na magbibigay ng mga serbisyo sa pagtugon sa insidente ng cyber extortion. Mag-aalok ang Coveware ng mga kakayahan sa forensics at remediation...
Binabago ng predictive maintenance ang sektor ng langis at gas, na may makabago at proactive na diskarte sa pamamahala ng halaman.…