مقالات

Laravel Middleware اهو ڪيئن ڪم ڪري ٿو

Laravel Middleware هڪ وچولي ايپليڪيشن پرت آهي جيڪا صارف جي درخواست ۽ ايپليڪيشن جي جواب جي وچ ۾ مداخلت ڪري ٿي.

ان جو مطلب اهو آهي ته جڏهن صارف (Laravel view) سرور (Laravel ڪنٽرولر) کي درخواست ڪري ٿو، درخواست مڊل ويئر ذريعي ٿيندي. هن طريقي سان مڊل ويئر چيڪ ڪري سگهي ٿو ته درخواست جي تصديق ٿيل آهي يا نه: 

  • جيڪڏهن صارف جي درخواست جي تصديق ڪئي وئي آهي، اها درخواست پس منظر ڏانهن موڪلي وئي آهي؛
  • جيڪڏهن صارف جي درخواست غير تصديق ٿيل آهي، مڊل ويئر صارف کي لاگ ان اسڪرين ڏانهن منتقل ڪندو.

Laravel توهان کي اجازت ڏئي ٿو defiختم ڪريو ۽ اضافي مڊل ويئر استعمال ڪريو مختلف ڪمن کي انجام ڏيڻ لاءِ تصديق کان سواءِ. 

Laravel Middlewares، جيئن ته تصديق ۽ CSRF تحفظ، ڊاريڪٽري ۾ واقع آهن ايپ/Http/Midleware .

تنهن ڪري اسان اهو چئي سگهون ٿا ته مڊل ويئر هڪ http درخواست فلٽر آهي، جنهن جي ذريعي اهو ممڪن آهي ته حالتن جي تصديق ڪرڻ ۽ ڪارناما انجام ڏيو.

وچولي سامان ٺاهڻ

ھڪڙو نئون مڊل ويئر ٺاھڻ لاءِ اسان ھيٺ ڏنل حڪم هلائيندا آھيون:

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

اسان ٺاهيندا آهيون middleware ۽ اسان ان کي سڏيندا آهيون CheckAge, artisan اسان کي هيٺ ڏنل جواب ڏيندو:

مٿي ڏنل ونڊو ڏيکاري ٿو ته مڊل ويئر ڪاميابي سان نالي سان ٺاهيو ويو آهي ” عمر چيڪ ڪريو ".

ڏسڻ لاءِ ته CheckAge Middleware ٺهيل آهي يا نه، ايپ/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 تي رجسٽر ٿي سگھي ٿو 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,
    ];

اسان پيدا ڪيو عمر چيڪ ڪريو پوئين مثال ۾. اسان ھاڻي ھن کي رجسٽر ڪري سگھون ٿا مڊل ويئر روٽ ملڪيت. اهڙي رجسٽريشن لاء ڪوڊ هيٺ ڏيکاريل آهي.

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 آئوٽ پٽ رول ​​جو نالو لکڻ لاءِ.

جدت نيوز ليٽر
جدت تي سڀ کان اهم خبر نه وڃايو. انهن کي اي ميل ذريعي حاصل ڪرڻ لاء سائن اپ ڪريو.

هاڻي اچو ته رجسٽر ڪريون RoleMiddleware 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,
    ];

ھاڻي پيٽرولر سان مڊل ويئر کي جانچڻ لاء، اسان کي ھڪڙي درخواست ۽ جواب ڏيڻ جي ضرورت آھي. جواب کي نقل ڪرڻ لاءِ اچو ته ڪنٽرولر ٺاهيون جنهن کي اسين 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.

هاڻي اچو ته رجسٽر ڪريون 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

توهان شايد شايد پسند ڪري سگھو ٿا:

جدت نيوز ليٽر
جدت تي سڀ کان اهم خبر نه وڃايو. انهن کي اي ميل ذريعي حاصل ڪرڻ لاء سائن اپ ڪريو.

تازيون مضمونون

Augmented Reality ۾ جديد مداخلت، ڪيٽينيا پولي ڪلينڪ ۾ ايپل ناظر سان

ڪيٽينيا پولي ڪلينڪ ۾ ايپل ويزن پرو ڪمرشل ناظر استعمال ڪندي هڪ چشمي جو آپريشن ڪيو ويو…

3 2024

ٻارن لاءِ رنگين صفحن جا فائدا - سڀني عمرن لاءِ جادوءَ جي دنيا

رنگ سازي ذريعي سٺي موٽر صلاحيتن کي ترقي ڪرڻ ٻارن کي وڌيڪ پيچيده صلاحيتن لاء تيار ڪري ٿو جهڙوڪ لکڻ. رنگ ڏيڻ…

2 2024

مستقبل هتي آهي: ڪيئن شپنگ انڊسٽري عالمي معيشت ۾ انقلاب آڻيندي آهي

بحري شعبي هڪ حقيقي عالمي معاشي طاقت آهي، جيڪا 150 بلين مارڪيٽ جي طرف نيويگيٽ ڪئي آهي ...

1 2024

پبلشرز ۽ OpenAI مصنوعي ذهانت پاران پروسيس ڪيل معلومات جي وهڪري کي منظم ڪرڻ لاءِ معاهدن تي دستخط ڪن ٿا

گذريل سومر، فنانشل ٽائمز OpenAI سان هڪ ڊيل جو اعلان ڪيو. ايف ٽي پنهنجي عالمي سطح جي صحافت کي لائسنس ڏئي ٿو ...

30 اپريل 2024

پنھنجي ٻوليءَ ۾ جدت پڙھو

جدت نيوز ليٽر
جدت تي سڀ کان اهم خبر نه وڃايو. انهن کي اي ميل ذريعي حاصل ڪرڻ لاء سائن اپ ڪريو.

اسان جي تابعداري ڪريو