არტიკოლი

Laravel Middleware როგორ მუშაობს

Laravel Middleware არის შუალედური აპლიკაციის ფენა, რომელიც ერევა მომხმარებლის მოთხოვნასა და აპლიკაციის პასუხს შორის.

ეს ნიშნავს, რომ როდესაც მომხმარებელი (Laravel view) უგზავნის მოთხოვნას სერვერს (Laravel controller), მოთხოვნა გაივლის შუა პროგრამაში. ამ გზით შუა პროგრამას შეუძლია შეამოწმოს მოთხოვნა დამოწმებულია თუ არა: 

  • თუ მომხმარებლის მოთხოვნა დამოწმებულია, მოთხოვნა იგზავნება backend-ში;
  • თუ მომხმარებლის მოთხოვნა არაავთენტიფიცირებულია, შუა პროგრამა გადამისამართებს მომხმარებელს შესვლის ეკრანზე.

Laravel გაძლევთ საშუალებას defiდაასრულეთ და გამოიყენეთ დამატებითი შუა პროგრამა, რათა შეასრულოთ სხვადასხვა ამოცანები, გარდა ავთენტიფიკაციისა. 

Laravel-ის შუალედური პროგრამები, როგორიცაა ავთენტიფიკაცია და CSRF დაცვა, განთავსებულია დირექტორიაში აპლიკაცია/Http/Middleware .

ამიტომ შეგვიძლია ვთქვათ, რომ შუა პროგრამა არის 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);
    }
}

გამოიყენეთ შუა პროგრამა

Middleware გამოსაყენებლად, ჩვენ უნდა დავრეგისტრირდეთ.

Laravel-ში არის ორი ტიპის შუალედური პროგრამა:

  • Middleware globale
  • Route Middleware

Il გლობალური შუალედური პროგრამა შესრულდება აპლიკაციიდან ყველა HTTP მოთხოვნაზე, ხოლო მარშრუტი Middleware მიენიჭება კონკრეტულ გზას. Middleware შეიძლება დარეგისტრირდეს app/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 წინა მაგალითში. ჩვენ ახლა შეგვიძლია დაარეგისტრიროთ ეს Middleware route თვისებაში. ასეთი რეგისტრაციის კოდი ნაჩვენებია ქვემოთ.

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 პარამეტრები

ჩვენ ასევე შეგვიძლია გადავცეთ პარამეტრები Middleware-ით. 

მაგალითად, თუ თქვენს აპლიკაციას აქვს სხვადასხვა როლები, როგორიცაა მომხმარებელი, ადმინისტრატორი, სუპერ ადმინისტრატორი და ა.შ. და გსურთ მოქმედების ავთენტიფიკაცია როლზე დაფუძნებული, ამის გაკეთება შეგიძლიათ პარამეტრების შუალედური პროგრამის საშუალებით. 

ჩვენ მიერ შექმნილი შუა პროგრამა შეიცავს შემდეგ ფუნქციას და არგუმენტის შემდეგ შეგვიძლია გადავიტანოთ მორგებული არგუმენტები $ შემდეგი .

    public function handle($request, Closure $next)
    {
        return $next($request);
    }

ახლა ვცადოთ როლის პარამეტრი დავაყენოთ ახალ შუალედზე, რომლის შექმნასაც ვაპირებთ ნულიდან, შემდეგ გავაგრძელოთ Role Middleware-ის შექმნა შემდეგი ბრძანების გაშვებით.

შეცვალეთ სახელურის მეთოდი შემდეგნაირად

<?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

Terminable Middleware

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

თქვენ ალბათ მოგეწონებათ:

საინფორმაციო ბიულეტენი
არ გამოტოვოთ ყველაზე მნიშვნელოვანი სიახლეები ინოვაციების შესახებ. დარეგისტრირდით, რომ მიიღოთ ისინი ელექტრონული ფოსტით.

ბოლო სტატიები

Veeam-ს აქვს გამოსასყიდის ყველაზე სრულყოფილი მხარდაჭერა, დაცვიდან რეაგირებამდე და აღდგენამდე

Coveware by Veeam გააგრძელებს კიბერ გამოძალვის ინციდენტებზე რეაგირების სერვისების მიწოდებას. Coveware შემოგთავაზებთ სასამართლო ექსპერტიზისა და გამოსწორების შესაძლებლობებს…

აპრილი 23 2024

მწვანე და ციფრული რევოლუცია: როგორ ცვლის პროგნოზირებადი მოვლა ნავთობისა და გაზის ინდუსტრიას

პროგნოზირებადი მოვლა რევოლუციას ახდენს ნავთობისა და გაზის სექტორში, ქარხნის მართვის ინოვაციური და აქტიური მიდგომით.…

აპრილი 22 2024

დიდი ბრიტანეთის ანტიმონოპოლიური მარეგულირებელი აყენებს BigTech განგაში GenAI-ზე

გაერთიანებული სამეფოს CMA-მ გამოსცა გაფრთხილება Big Tech-ის ქცევის შესახებ ხელოვნური ინტელექტის ბაზარზე. იქ…

აპრილი 18 2024

Casa Green: ენერგეტიკული რევოლუცია მდგრადი მომავლისთვის იტალიაში

ევროკავშირის მიერ შენობების ენერგოეფექტურობის გაზრდის მიზნით შემუშავებულმა „Case Green“ დადგენილებამ დაასრულა საკანონმდებლო პროცესი…

აპრილი 18 2024

წაიკითხეთ ინოვაცია თქვენს ენაზე

საინფორმაციო ბიულეტენი
არ გამოტოვოთ ყველაზე მნიშვნელოვანი სიახლეები ინოვაციების შესახებ. დარეგისტრირდით, რომ მიიღოთ ისინი ელექტრონული ფოსტით.

Follow us