Oku kuthetha ukuba xa umsebenzisi (umbono weLaravel) wenza isicelo kumncedisi (umlawuli weLaravel), isicelo siya kuhamba nge-middleware. Ngale ndlela i-middleware inokukhangela ukuba ngaba isicelo siqinisekisiwe okanye hayi:
ILaravel ikuvumela ukuba wenze defiGqiba kwaye usebenzise i-middleware eyongezelelweyo ukwenza imisebenzi eyahlukeneyo ngaphandle kobunyani.
I-Laravel middlewares, njengobungqina kunye nokhuseleko lwe-CSRF, zibekwe kuluhlu app/Http/Middleware .
Ngoko ke sinokuthi i-middleware sisihluzo sesicelo se-http, apho kunokwenzeka ukuba uqinisekise iimeko kunye nokwenza izenzo.
Ukwenza i-middleware entsha siqhuba lo myalelo ulandelayo:
php artisan make:middleware <name-of-middleware>
Senza i middleware
kwaye siyibiza CheckAge
, artisan
iya kusiphendula ngolu hlobo lulandelayo:
Ifestile engasentla ibonisa ukuba i-middleware yenziwe ngempumelelo ngegama " CheckAge ".
Ukubona ukuba i-CheckAge middleware yenziwe okanye hayi, yiya kwiprojekthi ekwi-app/Http/Middleware ulawulo, kwaye uya kubona ifayile eyenziwe ngokutsha.
Ifayile entsha eyenziweyo inekhowudi elandelayo
<?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);
}
}
Ukusebenzisa i-middleware, kufuneka siyibhalise.
Kukho iintlobo ezimbini ze-middleware eLaravel:
Middleware globale
Route Middleware
Il i-middleware yehlabathi izakwenziwa kwisicelo ngasinye seHTTP kwisicelo, ngelixa i Indlela ephakathi izakwabelwa kwindlela ethile. I-Middleware inokubhaliswa kwi app/Http/Kernel.php. Le fayile ineempawu ezimbini $middleware e $ umzilaMiddleware . Ipropathi ye-$middleware isetyenziselwa ukubhalisa i-middleware yehlabathi kunye nobunini $ umzilaMiddleware isetyenziselwa ukubhalisa i-middleware ethile.
Ukubhalisa i-middleware jikelele, dwelisa iklasi ekupheleni kwepropathi ye- $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,
];
Ukubhalisa i-middleware ethile, yongeza isitshixo kunye nexabiso kwipropathi ye-routeMiddleware ye-$.
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,
];
Sakha CheckAge kumzekelo odlulileyo. Ngoku singabhalisa oku kwipropathi yendlela ephakathi. Ikhowudi yobhaliso olunjalo iboniswe ngezantsi.
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,
];
Singakwazi kwakhona ukudlula iiparamitha nge-Middleware.
Umzekelo, ukuba isicelo sakho sineendima ezahlukeneyo njengomsebenzisi, umlawuli, umphathi omkhulu njl. kwaye ufuna ukungqinisisa intshukumo esekwe kwindima, ungayenza ngokugqithisa iiparameters nge middleware.
I-middleware esiyidalileyo iqulethe umsebenzi olandelayo, kwaye sinokudlula iingxoxo zesiko emva kwengxabano $okulandelayo .
public function handle($request, Closure $next)
{
return $next($request);
}
Ngoku makhe sizame ukuseta indima yeparameter kwisixhobo esiphakathi esitsha esiza kuyenza ukusuka ekuqaleni, emva koko siqhubele phambili ukwenza iNdawo ePhakathi ngokwenza lo myalelo ulandelayo.
Guqula indlela yokubamba ngolu hlobo lulandelayo
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
songeze iparameter $role
, kwaye ngaphakathi kwendlela umgca echo
ukubhala isiphumo igama lendima.
Ngoku masibhalise i-RoleMiddleware middleware kwindlela ethile
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,
];
Ngoku ukuvavanya i-middleware ngeparameter, kufuneka senze isicelo kunye nempendulo. Ukulinganisa impendulo masenze isilawuli esiya kuthi sibize iTestController
php artisan make:controller TestController --plain
Umyalelo osanda kuphunyezwa uzakwenza umlawuli omtsha ngaphakathi kwisilawulo app/Http/TestController.php
, kwaye utshintshe indlela index
ngomgca 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.";
}
}
Emva kokumisela impendulo, sakha isicelo ngokuhlela ifayile routes.php
ngokongeza i route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
kweli nqanaba sinokuzama umzekelo ngokundwendwela i-URL http://localhost:8000/role
kwaye kwisikhangeli siza kubona ezi zimbini echo
Role editor
Test Controller
Il terminable Middleware
yenza eminye imisebenzi emva kokuba impendulo ithunyelwe kwisikhangeli. Oku kunokufezekiswa ngokudala i-middleware kunye nendlela phelisa kwi-middleware. Il terminable Middleware
kufuneka ibhaliswe kunye middleware
jikelele. Indlela terminate
uya kufumana iingxoxo ezimbini Isicelo se-$ e $ impendulo.
Indlela Terminate
kufuneka yenziwe njengoko kubonisiwe kule khowudi ilandelayo.
php artisan make:middleware TerminateMiddleware
Nje ukuba i-middleware yenziwe app/Http/Middleware/TerminateMiddleware.php
masiyiguqule ikhowudi ngolu hlobo lulandelayo
<?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.";
}
}
kule meko sinendlela handle
kunye nendlela terminate
ngeeparamitha ezimbini $request
e $response
.
Ngoku masibhalise i-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,
];
Ngoku kufuneka senze umlawuli ukulinganisa impendulo
php artisan make:controller XYZController --plain
ukulungisa imixholo yeklasi
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
Ngoku kufuneka sihlele ifayile routes/web.php
Ukongeza iindlela ezifunekayo ukwenza isicelo sisebenze
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
kweli nqanaba sinokuzama umzekelo ngokundwendwela i-URL http://localhost:8000/terminate
kwaye kwisikhangeli siya kubona le migca ilandelayo
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Unokuthanda:
Ukuphuhlisa izakhono zemoto ngokufaka imibala kulungiselela abantwana izakhono ezinzima ezifana nokubhala. Ukufaka umbala...
Icandelo lomkhosi wasemanzini ligunya lokwenyani loqoqosho lwehlabathi, elithe lajonga kwimarike ye-150 yeebhiliyoni...
NgoMvulo ophelileyo, i-Financial Times ibhengeze isivumelwano kunye ne-OpenAI. I-FT ikhupha iilayisensi kubuntatheli bayo obukumgangatho wehlabathi…
Izigidi zabantu zihlawula iinkonzo zokusasaza, zihlawula umrhumo wenyanga. Luluvo oluqhelekileyo ukuba…