Laravel Framework Basics পর্ব-৪ : Laravel Middleware

Laravel Framework এ Middleware কি?

Laravel Middleware
Laravel Middleware

Laravel Framework এ Middleware হচ্ছে আপনার application এ বিভিন্ন সোর্স থেকে আসা HTTP request গুলোকে controller এ পাঠানোর আগে filtering করার একটা দুর্দান্ত Mechanism বা পদ্ধতি। ধরুন Laravel authentication Middleware এর কথাই ধরা যাক, যখন আপনার application এ কোনো user লগইন করতে চায়, সেক্ষেত্রে Laravel authentication Middleware কাজ হচ্ছে যেই user লগইন করতে চায় , তাকে authentication Middleware নিজে Middle Man হিসেবে verify করবে , যদি ইউজার authenticated না হয় , তাহলে Laravel authentication Middleware সেই user কে login screen এ পাঠাবে , আর যদি authenticated হন, তাহলে laravel authentication Middleware ইউজারকে পরবর্তী কাজ করার বা পরবর্তী ধাপে যাওয়ার অনুমতি প্রধান করবে। সহজ ভাবে বলা যায় , আপনার application এ যেকোনো request এর পর এবং response এর পূর্বে সব ধরণের verification এবং authentication করার Mechanism হচ্ছে Middleware. Laravel এ Middleware ফাইল গুলা app/Http/Middleware এই ডিরেক্টরিতে রাখতে হয়।

Laravel Framework এ কি কি ধরণের Middleware আছে?

Laravel এ authentication Middleware এর পাশাপাশি আরো অনেক গুলো Middleware বিভিন্ন কাজের জন্য লিখা হয়েছে, যেমন: সব গুলো রেসপন্স application ত্যাগ করার আগে তার সঠিক header গুলো সংযুক্ত করার জন্য তৈরী করা হয়েছে CORS Middleware . আর incoming request এর লগ রাখার জন্য logging Middleware তৈরী করা হয়েছে। এছাড়াও CSRF protection এর জন্য CSRF Middleware । এছাড়া আপনার নিজের প্রয়োজন মতো বিভিন্ন Custom Middleware খুব সহজে তৈরী করে নিতে পারেন।

Middleware ব্যবহার করে আপনার application এর কোন কোন কাজ গুলো করতে পারেন ?

Laravel Framework এ Middleware ব্যবহার করে আমরা বিভিন্ন ধরণের কাজ করতে পারি, তারমধ্যে উল্লেখযোগ্য হচ্ছে :

১. আপনার Application এর Request গুলোর Log রাখতে পারেন।
২. বিভিন্ন Condition এর উপর ভিত্তি করে ইউজারদেরকে ভিন্ন ভিন্ন page এ redirect করতে পারেন।
৩. আপনার Application এ Incoming Parameters গুলোকে altering এবং sanitizing করতে পারেন।
৪. Response গুলোকে Manipulate করতে পারেন।
৫. এবং আরো অনেক কিছু

Mastering Laravel with ReactJS Course

Laravel Framework এ কিভাবে Middleware তৈরী করা হয় ?

Laravel Framework এ নতুন Middleware তৈরী করতে হলে আপনাকে php artisan make:middleware MiddlewareName কমান্ডটি CLI তে রান করার মাধ্যমে Middleware তৈরী করে নিতে হবে। তাহলে চলুন আমরা একটা CheckAge নামে একটা Middleware তৈরী করি। যার কাজ হবে আমাদের application এ রিকোয়েস্ট age যদি ৩০ এর চেয়ে কম আসে তাহলে আমরা তাকে allow করব । CheckAge নামে নতুন middleware তৈরী করার জন্য আপনার CLI (Command Line Interface) এ নিচের কমান্ডটি রান করুন :

php artisan make:middleware CheckAge

সব কিছু ঠিক থাকলে আপনার CLI এ নিচের মতো রেজাল্ট দেখাবে :

Create new Middleware in Laravel 5.5

এখন আপনার app/Http/Middleware ফোল্ডারে checkAge নামে একটা middleware তৈরী হয়েগেছে ঠিক নিচের মতো :

Laravel Middleware List

এবং আপনার CheckAge 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);
    }
}

নতুন CheckAge Middleware রেজিস্ট্রেশন

নতুন checkAge Middleware নিয়ে কাজ করতে হলে আপনাকে app/Http/kernel.php file এ এটিকে রেজিস্টার করে দিতে হবে , ঠিক নিচের মতো :

protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'CheckAge' => \App\Http\Middleware\CheckAge::class,
    ];

Mastering Laravel with ReactJS Course

Controller Part :

এখন আমরা আমাদের age show করার জন্য একটা Controller তৈরী করব, যেটার আগে middleware চেক করবে http request এর মাধ্যমে আসা age টি valid কিনা তা চেক করবে। চলুন নিচের কমান্ডটির মাধ্যমে একটা showAge নামে Controller তৈরী করা যাক :

php artisan make:controller showAge

এখন নিচের মতো করে আপনার showAge নামে controller টি তৈরী হবে

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class showAge extends Controller
{
    //
}

এখন showAge Controller এ একটা index method করব যার কাজ হবে http request এর মাধ্যমে আসা age টি দেখাবে। নিচের কোডটি লক্ষ্য করুন :

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class showAge extends Controller
{
    public function index(Request $request){
    	echo "Welcome You're $request->age years Old";
    	
    }
}

Middleware এ Condition চেক :

এখন আমরা আমাদের তৈরী checkAge Middleware এ আমাদের age Validation করব , ধরুন আমরা আমাদের এপ্লিকেশন এ ৩০ বছরের বেশি বয়সী কেউকে allow করবোনা , এর জন্য আমরা নিচের কোডটি লিখব :

<?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)
    {
         if ($request->age>=30) {
            die("You are $request->age years old, sorry we are unable to welcome you right now!");
        }

        return $next($request);
    
    }
}

Route Part :

এখন আমরা আমাদের route এ বলে দিবো আমাদের age টি কোন Controller দিয়ে প্রদর্শন করবে , এবং কোন Middleware দিয়ে Validation করবে। চলুন লেখা যাক :

use App\Http\Controllers\showAge;
use App\Http\Middleware\checkAge;

Route::middleware([checkAge::class])->group(function(){
 
    Route::get('showage', [showAge::class,'index']);
 
 });

এখন আমরা ৩০ বছরের বেশি বয়স দিয়ে প্রথমে চেক করব। আর চেক করার জন্য নিচের URL টি আপনার Browser address bar এ দিয়ে hit করুন :

http://localhost:8000/showage?age=50

আপনার ব্রাউজার এর ফলাফল নিচের মত আসবে:

Laravel Middleware Validation

আর যদি আপনি age 30 এর কম দেন তাহলে নিচের মতো রেজাল্ট আসবে। এবার নিচের URL টি ব্রাউজার এ দিয়ে হিট করুন :

http://localhost:8000/showage?age=15

Result

Laravel Middleware Validation Pass
Laravel Middleware Validation Pass

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ১৫ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller, Amarbebsha Ltd সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ডেটা সাইন্স, মেশিন লার্নিং, বিগ ডেটা, ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। এছাড়াও বাংলাদেশের ১৮৫ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ১২০ এরও অধিক ছাত্র আমার হাতে জেন্ড সার্টিফাইড ইঞ্জিনিয়ার হয়েছেন। বর্তমানে w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -8.2 Engineering, Laravel Mastering Course with ReactJS, Python Beginning To Advance with Blockchain, Machine Learning and Data Science, Professional WordPress Plugin Development Beginning to Advance কোর্স করাই। আর অবসর সময়ে w3programmers.com এ ওয়েব টেকনোলজি নিয়ে লেখালেখি করি।

Leave a Reply