Bu shuni anglatadiki, foydalanuvchi (Laravel ko'rinishi) serverga (Laravel kontrolleri) so'rov yuborganida, so'rov o'rta dastur orqali o'tadi. Shunday qilib, o'rta dastur so'rovning autentifikatsiya qilingan yoki tekshirilmaganligini tekshirishi mumkin:
Laravel sizga imkon beradi defiautentifikatsiyadan tashqari turli vazifalarni bajarish uchun qo'shimcha o'rta dasturni tugating va foydalaning.
Autentifikatsiya va CSRF himoyasi kabi Laravel oraliq dasturlari katalogda joylashgan app/Http/Middleware .
Shuning uchun biz shuni aytishimiz mumkinki, vositachi dastur http so'rov filtri bo'lib, u orqali shartlarni tekshirish va amallarni bajarish mumkin.
Yangi o'rta dastur yaratish uchun biz quyidagi buyruqni bajaramiz:
php artisan make:middleware <name-of-middleware>
ni yaratamiz middleware
va biz uni chaqiramiz CheckAge
, artisan
bizga quyidagicha javob beradi:
Yuqoridagi oyna o'rta dastur nomi bilan muvaffaqiyatli yaratilganligini ko'rsatadi ” CheckAge ".
CheckAge oraliq dasturi yaratilgan yoki yaratilmaganligini bilish uchun ilova/Http/Middleware papkasidagi loyihaga o'ting va siz yangi yaratilgan faylni ko'rasiz.
Yangi yaratilgan fayl quyidagi kodga ega
<?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);
}
}
O'rta dasturdan foydalanish uchun biz uni ro'yxatdan o'tkazishimiz kerak.
Laravelda o'rta dasturning ikki turi mavjud:
Middleware globale
Route Middleware
Il global o'rta dastur ilovadan har bir HTTP so'rovida bajariladi, shu bilan birga Marshrut o'rta dasturi ma'lum bir yo'lga tayinlanadi. O'rta dasturni ro'yxatdan o'tkazish mumkin app/Http/Kernel.php. Ushbu fayl ikkita xususiyatni o'z ichiga oladi $ o'rta dastur e $routeMiddleware . $middleware xususiyati global vositachi dastur va egalikni ro'yxatdan o'tkazish uchun ishlatiladi $routeMiddleware marshrutga xos vositachi dasturlarni ro'yxatdan o'tkazish uchun ishlatiladi.
Global o'rta dasturiy ta'minotni ro'yxatdan o'tkazish uchun $middleware xususiyati oxirida sinfni ko'rsating.
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,
];
Marshrutga xos vositachi dasturni ro'yxatdan o'tkazish uchun $routeMiddleware xususiyatiga kalit va qiymatni qo'shing.
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,
];
Biz yaratdik CheckAge oldingi misolda. Endi biz buni o'rta dastur marshrut xususiyatida ro'yxatdan o'tkazishimiz mumkin. Bunday ro'yxatga olish uchun kod quyida ko'rsatilgan.
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,
];
Parametrlarni Middleware bilan ham o'tkazishimiz mumkin.
Masalan, agar ilovangiz foydalanuvchi, administrator, super administrator va boshqalar kabi turli rollarga ega bo'lsa. va siz rolga asoslangan harakatni autentifikatsiya qilishni xohlaysiz, siz buni parametrlarni o'rta dastur bilan o'tkazish orqali qilishingiz mumkin.
Biz yaratgan o'rta dastur quyidagi funksiyani o'z ichiga oladi va biz argumentdan keyin maxsus argumentlarni o'tkazishimiz mumkin $keyingi .
public function handle($request, Closure $next)
{
return $next($request);
}
Keling, rol parametrini biz noldan yaratmoqchi bo'lgan yangi o'rta dasturga o'rnatishga harakat qilaylik, keyin quyidagi buyruqni ishga tushirish orqali Role Middleware yaratishga o'tamiz.
Tutqich usulini quyidagi tarzda o'zgartiring
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
parametrni qo'shdik $role
, va usul ichida chiziq echo
chiqishga rol nomini yozish uchun.
Endi ma'lum bir yo'l uchun RoleMiddleware o'rta dasturini ro'yxatdan o'tkazamiz
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,
];
Endi o'rta dasturni parametr bilan sinab ko'rish uchun biz so'rov va javob yaratishimiz kerak. Javobni simulyatsiya qilish uchun biz TestController deb ataydigan kontrollerni yaratamiz
php artisan make:controller TestController --plain
hozirgina bajarilgan buyruq papka ichida yangi kontroller yaratadi app/Http/TestController.php
, va usulni o'zgartiring index
chiziq bilan 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.";
}
}
Javobni o'rnatganimizdan so'ng, faylni tahrirlash orqali so'rovni yaratamiz routes.php
ni qo'shish orqali route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
bu nuqtada biz URL ga tashrif buyurib, misolni sinab ko'rishimiz mumkin http://localhost:8000/role
va brauzerda biz ikkitasini ko'ramiz echo
Role editor
Test Controller
Il terminable Middleware
javob brauzerga yuborilgandan so'ng ba'zi vazifalarni bajaradi. Bunga usul bilan o'rta dastur yaratish orqali erishish mumkin o'rta dasturda tugatish. Il terminable Middleware
ro'yxatdan o'tgan bo'lishi kerak middleware
global. Usul terminate
ikkita argument oladi $so'rov e $javob.
Usul Terminate
quyidagi kodda ko'rsatilganidek yaratilishi kerak.
php artisan make:middleware TerminateMiddleware
O'rta dastur yaratilgandan so'ng app/Http/Middleware/TerminateMiddleware.php
kodni quyidagi tarzda o'zgartiramiz
<?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.";
}
}
bu holda bizda bir usul bor handle
va usul terminate
ikki parametr bilan $request
e $response
.
Endi o'rta dasturni ro'yxatdan o'tkazamiz
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,
];
Endi biz javobni simulyatsiya qilish uchun boshqaruvchini yaratishimiz kerak
php artisan make:controller XYZController --plain
sinf mazmunini o'zgartirish
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
Endi biz faylni tahrirlashimiz kerak routes/web.php
so'rovni faollashtirish uchun kerakli marshrutlarni qo'shish
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
bu nuqtada biz URL ga tashrif buyurib, misolni sinab ko'rishimiz mumkin http://localhost:8000/terminate
va brauzerda biz quyidagi qatorlarni ko'ramiz
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Shuningdek, sizga quyidagilar yoqishi mumkin:
Rang berish orqali nozik vosita ko'nikmalarini rivojlantirish bolalarni yozish kabi murakkabroq ko'nikmalarga tayyorlaydi. Rang berish uchun…
Harbiy dengiz sektori 150 milliardlik bozorga yo'l olgan haqiqiy global iqtisodiy kuchdir...
O'tgan dushanba kuni Financial Times OpenAI bilan shartnoma imzolaganini e'lon qildi. FT o'zining jahon darajasidagi jurnalistikasini litsenziyalaydi...
Millionlab odamlar oylik abonent to'lovlarini to'lab, oqim xizmatlari uchun to'laydilar. Umumiy fikr, siz ...