लेख

लारवेल मिडलवेयर यह कैसे काम करता है

Laravel मिडलवेयर एक इंटरमीडिएट एप्लिकेशन लेयर है जो उपयोगकर्ता के अनुरोध और एप्लिकेशन की प्रतिक्रिया के बीच हस्तक्षेप करता है।

इसका अर्थ है कि जब उपयोगकर्ता (Laravel view) सर्वर (Laravel नियंत्रक) से अनुरोध करता है, तो अनुरोध मिडलवेयर के माध्यम से जाएगा। इस तरह मिडलवेयर जांच कर सकता है कि अनुरोध प्रमाणित है या नहीं: 

  • यदि उपयोगकर्ता का अनुरोध प्रमाणित है, तो अनुरोध बैकएंड को भेजा जाता है;
  • यदि उपयोगकर्ता का अनुरोध अप्रमाणित है, तो मिडलवेयर उपयोगकर्ता को लॉगिन स्क्रीन पर पुनर्निर्देशित करेगा।

लारवेल आपको इसकी अनुमति देता है defiप्रमाणीकरण को छोड़कर विभिन्न प्रकार के कार्य करने के लिए अतिरिक्त मिडलवेयर को समाप्त करें और उसका उपयोग करें। 

लारवेल मिडलवेयर, जैसे प्रमाणीकरण और सीएसआरएफ सुरक्षा, निर्देशिका में स्थित हैं ऐप/एचटीटीपी/मिडलवेयर .

इसलिए हम कह सकते हैं कि मिडलवेयर एक http अनुरोध फ़िल्टर है, जिसके माध्यम से शर्तों को सत्यापित करना और क्रियाएं करना संभव है।

मिडलवेयर बनाना

एक नया मिडलवेयर बनाने के लिए हम निम्नलिखित कमांड चलाते हैं:

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

हम बनाते हैं middleware और हम इसे कहते हैं CheckAge, artisan हमें इस प्रकार उत्तर देंगे:

ऊपर दी गई विंडो से पता चलता है कि मिडलवेयर को नाम से सफलतापूर्वक बनाया गया है ” चेकएज ".

यह देखने के लिए कि CheckAge मिडलवेयर बनाया गया है या नहीं, ऐप/एचटीटीपी/मिडलवेयर फ़ोल्डर में प्रोजेक्ट पर जाएं, और आप नई बनाई गई फ़ाइल देखेंगे

नई बनाई गई फ़ाइल में निम्न कोड है

<?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 globale
  • Route Middleware

Il वैश्विक मिडलवेयर एप्लिकेशन से प्रत्येक HTTP अनुरोध पर निष्पादित किया जाएगा, जबकि रूट मिडलवेयर एक विशिष्ट पथ को सौंपा जाएगा। मिडिलवेयर पर पंजीकृत किया जा सकता है ऐप/एचटीटीपी/कर्नेल.php. इस फ़ाइल में दो गुण हैं $ मिडलवेयर e $routeMiddleware . $ मिडलवेयर संपत्ति वैश्विक मिडलवेयर और स्वामित्व को पंजीकृत करने के लिए उपयोग किया जाता है $routeMiddleware मार्ग-विशिष्ट मिडलवेयर को पंजीकृत करने के लिए उपयोग किया जाता है।

वैश्विक मिडलवेयर को पंजीकृत करने के लिए, $ मिडलवेयर संपत्ति के अंत में वर्ग को सूचीबद्ध करें।

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

अब पैरामीटर के साथ मिडलवेयर का परीक्षण करने के लिए, हमें एक अनुरोध और प्रतिक्रिया बनाने की आवश्यकता है। प्रतिक्रिया का अनुकरण करने के लिए आइए नियंत्रक बनाएं जिसे हम टेस्टकंट्रोलर कहेंगे

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

आप यह भी पसंद कर सकते हैं:

नवाचार समाचार पत्र
नवाचार पर सबसे महत्वपूर्ण समाचार देखना न भूलें। उन्हें ईमेल द्वारा प्राप्त करने के लिए साइन अप करें।

हाल के लेख

बच्चों के लिए रंग भरने वाले पन्नों के लाभ - सभी उम्र के लोगों के लिए जादू की दुनिया

रंग भरने के माध्यम से बढ़िया मोटर कौशल विकसित करना बच्चों को लेखन जैसे अधिक जटिल कौशल के लिए तैयार करता है। रंग भरना…

2 मई 2024

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

नौसैनिक क्षेत्र एक सच्ची वैश्विक आर्थिक शक्ति है, जो 150 अरब के बाज़ार की ओर बढ़ चुका है...

1 मई 2024

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

पिछले सोमवार को, फाइनेंशियल टाइम्स ने OpenAI के साथ एक समझौते की घोषणा की। एफटी अपनी विश्व स्तरीय पत्रकारिता को लाइसेंस देता है...

अप्रैल 30 2024

ऑनलाइन भुगतान: यहां बताया गया है कि स्ट्रीमिंग सेवाएं आपको हमेशा के लिए भुगतान कैसे कराती हैं

लाखों लोग स्ट्रीमिंग सेवाओं के लिए मासिक सदस्यता शुल्क का भुगतान करते हैं। यह आम राय है कि आप...

अप्रैल 29 2024

अपनी भाषा में इनोवेशन पढ़ें

नवाचार समाचार पत्र
नवाचार पर सबसे महत्वपूर्ण समाचार देखना न भूलें। उन्हें ईमेल द्वारा प्राप्त करने के लिए साइन अप करें।

Seguici