लेख

Laravel मिडलवेयर यो कसरी काम गर्दछ

Laravel Middleware एक मध्यवर्ती अनुप्रयोग तह हो जसले प्रयोगकर्ताको अनुरोध र अनुप्रयोगको प्रतिक्रिया बीच हस्तक्षेप गर्दछ।

यसको मतलब यो हो कि जब प्रयोगकर्ता (Laravel दृश्य) ले सर्भर (Laravel नियन्त्रक) लाई अनुरोध गर्दछ, अनुरोध मिडलवेयर मार्फत जान्छ। यस तरीकाले मिडलवेयरले जाँच गर्न सक्छ कि अनुरोध प्रमाणीकृत छ वा छैन: 

  • यदि प्रयोगकर्ताको अनुरोध प्रमाणीकरण गरिएको छ भने, अनुरोध ब्याकइन्डमा पठाइन्छ;
  • यदि प्रयोगकर्ताको अनुरोध अप्रमाणित छ भने, मिडलवेयरले प्रयोगकर्तालाई लगइन स्क्रिनमा रिडिरेक्ट गर्नेछ।

Laravel ले तपाईंलाई अनुमति दिन्छ defiसमाप्त गर्नुहोस् र प्रमाणीकरण बाहेक विभिन्न कार्यहरू गर्न थप मिडलवेयर प्रयोग गर्नुहोस्। 

Laravel मिडलवेयरहरू, जस्तै प्रमाणीकरण र CSRF सुरक्षा, निर्देशिकामा अवस्थित छन् एप/Http/मिडलवेयर .

त्यसकारण हामी यो भन्न सक्छौं कि मिडलवेयर एक http अनुरोध फिल्टर हो, जसको माध्यमबाट सर्तहरू प्रमाणित गर्न र कार्यहरू गर्न सम्भव छ।

मिडलवेयर सिर्जना गर्दै

नयाँ मिडलवेयर सिर्जना गर्न हामी निम्न आदेश चलाउँछौं:

php artisan make:middleware <name-of-middleware>

हामी सिर्जना गर्छौं middleware र हामी यसलाई कल गर्छौं CheckAge, artisan निम्नानुसार हामीलाई जवाफ दिनेछ:

माथिको विन्डोले देखाउँछ कि मिडलवेयर सफलतापूर्वक नामको साथ सिर्जना गरिएको छ। उमेर जाँच गर्नुहोस् "।

CheckAge मिडलवेयर सिर्जना गरिएको छ वा छैन भनेर हेर्नको लागि, एप/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);
    }
}

मिडलवेयर प्रयोग गर्नुहोस्

मिडलवेयर प्रयोग गर्न, हामीले यसलाई दर्ता गर्न आवश्यक छ।

Laravel मा दुई प्रकारका मिडलवेयर छन्:

  • Middleware globale
  • Route Middleware

Il विश्वव्यापी मिडलवेयर अनुप्रयोगबाट प्रत्येक HTTP अनुरोधमा कार्यान्वयन गरिनेछ, जबकि रुट मिडलवेयर निश्चित मार्गमा तोकिनेछ। मिडलवेयर मा दर्ता गर्न सकिन्छ app/Http/Kernel.php। यो फाइलमा दुई गुणहरू छन् $midleware 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,
    ];

हामीले सिर्जना गर्यौं उमेर जाँच गर्नुहोस् अघिल्लो उदाहरणमा। अब हामी यसलाई मिडलवेयर रूट सम्पत्तीमा दर्ता गर्न सक्छौं। यस्तो दर्ताको लागि कोड तल देखाइएको छ।

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

मिडलवेयर प्यारामिटरहरू

हामी मिडलवेयरसँग प्यारामिटरहरू पनि पास गर्न सक्छौं। 

उदाहरणका लागि, यदि तपाइँको अनुप्रयोगमा प्रयोगकर्ता, प्रशासक, सुपर प्रशासक आदि जस्ता फरक भूमिकाहरू छन्। र तपाइँ भूमिकाको आधारमा कार्य प्रमाणीकरण गर्न चाहानुहुन्छ, तपाइँ यसलाई मिडलवेयरसँग प्यारामिटरहरू पास गरेर गर्न सक्नुहुन्छ। 

हामीले सिर्जना गरेको मिडलवेयरले निम्न प्रकार्य समावेश गर्दछ, र हामी तर्क पछि अनुकूलन तर्कहरू पास गर्न सक्छौं $अर्को .

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

अब रोल प्यारामिटरलाई नयाँ मिडलवेयरमा सेट गर्ने प्रयास गरौं जुन हामीले स्क्र्याचबाट सिर्जना गर्न गइरहेका छौं, त्यसपछि निम्न आदेश चलाएर रोल मिडलवेयर सिर्जना गर्न अगाडि बढौं।

निम्नानुसार ह्यान्डल विधि परिमार्जन गर्नुहोस्

<?php

namespace App\Http\Middleware;
use Closure;

class RoleMiddleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

हामीले प्यारामिटर थप्यौं $role, र विधि भित्र लाइन echo आउटपुट भूमिकाको नाम लेख्न।

नवाचार न्यूजलेटर
नवीनता मा सबैभन्दा महत्त्वपूर्ण समाचार नछुटाउनुहोस्। तिनीहरूलाई ईमेल द्वारा प्राप्त गर्न साइन अप गर्नुहोस्।

अब एक विशिष्ट मार्गको लागि रोलमिडलवेयर मिडलवेयर दर्ता गरौं

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

टर्मिनेबल मिडलवेयर

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.

अब मिडलवेयर दर्ता गरौं

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

तपाईंलाई पनि मनपर्न सक्छ:

नवाचार न्यूजलेटर
नवीनता मा सबैभन्दा महत्त्वपूर्ण समाचार नछुटाउनुहोस्। तिनीहरूलाई ईमेल द्वारा प्राप्त गर्न साइन अप गर्नुहोस्।

भर्खरका लेखहरू

भविष्य यहाँ छ: कसरी शिपिंग उद्योगले विश्वव्यापी अर्थतन्त्रमा क्रान्ति गर्दैछ

नौसेना क्षेत्र एक साँचो वैश्विक आर्थिक शक्ति हो, जसले 150 बिलियन बजारमा नेभिगेट गरेको छ ...

1 मई 2024

प्रकाशकहरू र ओपनएआईले आर्टिफिसियल इन्टेलिजेन्सद्वारा प्रशोधित सूचनाको प्रवाहलाई विनियमित गर्न सम्झौतामा हस्ताक्षर गर्छन्

गत सोमबार, फाइनान्सियल टाइम्सले OpenAI सँग सम्झौताको घोषणा गर्‍यो। FT ले आफ्नो विश्व स्तरीय पत्रकारिता लाई लाइसेन्स...

30 अप्रिल 2024

अनलाइन भुक्तानीहरू: यहाँ कसरी स्ट्रिमिङ सेवाहरूले तपाईंलाई सधैंभरि भुक्तान गर्छ

लाखौं मानिसहरूले स्ट्रिमिङ सेवाहरूको लागि भुक्तानी गर्छन्, मासिक सदस्यता शुल्क तिर्छन्। यो आम धारणा छ कि तपाईं…

29 अप्रिल 2024

Veeam ले ransomware को लागि सुरक्षा देखि प्रतिक्रिया र रिकभरी को लागी सबै भन्दा व्यापक समर्थन को सुविधा दिन्छ

Veeam द्वारा Coveware ले साइबर जबरजस्ती घटना प्रतिक्रिया सेवाहरू प्रदान गर्न जारी राख्नेछ। Coveware ले फोरेन्सिक र उपचार क्षमताहरू प्रदान गर्दछ ...

23 अप्रिल 2024

आफ्नो भाषामा नवीनता पढ्नुहोस्

नवाचार न्यूजलेटर
नवीनता मा सबैभन्दा महत्त्वपूर्ण समाचार नछुटाउनुहोस्। तिनीहरूलाई ईमेल द्वारा प्राप्त गर्न साइन अप गर्नुहोस्।

हामीलाई पछ्याउनुहोस्