Maqolalar

Laravel o'rta dasturi qanday ishlaydi

Laravel o'rta ta'minoti - foydalanuvchi so'rovi va ilova javobi o'rtasida aralashadigan oraliq dastur qatlami.

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: 

  • agar foydalanuvchi so'rovi autentifikatsiya qilingan bo'lsa, so'rov backendga yuboriladi;
  • agar foydalanuvchi so'rovi autentifikatsiya qilinmagan bo'lsa, vositachi dastur foydalanuvchini kirish ekraniga yo'naltiradi.

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.

O'rta dastur yaratish

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 foydalaning

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,
    ];

O'rta dastur parametrlari

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.

Innovatsion axborot byulleteni
Innovatsiyalar haqidagi eng muhim yangiliklarni o'tkazib yubormang. Ularni elektron pochta orqali olish uchun ro'yxatdan o'ting.

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.phpni 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

Tugatiladigan o'rta dastur

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:

Innovatsion axborot byulleteni
Innovatsiyalar haqidagi eng muhim yangiliklarni o'tkazib yubormang. Ularni elektron pochta orqali olish uchun ro'yxatdan o'ting.

So'nggi maqolalar

Bolalar uchun sahifalarni bo'yashning afzalliklari - barcha yoshdagilar uchun sehrli dunyo

Rang berish orqali nozik vosita ko'nikmalarini rivojlantirish bolalarni yozish kabi murakkabroq ko'nikmalarga tayyorlaydi. Rang berish uchun…

2 may 2024

Kelajak bu yerda: Yuk tashish sanoati global iqtisodiyotni qanday inqilob qilmoqda

Harbiy dengiz sektori 150 milliardlik bozorga yo'l olgan haqiqiy global iqtisodiy kuchdir...

1 may 2024

Noshirlar va OpenAI sun'iy intellekt tomonidan qayta ishlangan ma'lumotlar oqimini tartibga solish bo'yicha shartnomalar imzolaydilar.

O'tgan dushanba kuni Financial Times OpenAI bilan shartnoma imzolaganini e'lon qildi. FT o'zining jahon darajasidagi jurnalistikasini litsenziyalaydi...

30 Aprel 2024

Onlayn to'lovlar: Streaming xizmatlari sizni qanday qilib abadiy to'lashga majbur qiladi

Millionlab odamlar oylik abonent to'lovlarini to'lab, oqim xizmatlari uchun to'laydilar. Umumiy fikr, siz ...

29 Aprel 2024