Laravel Framework Basics
Laravel Framework Basics পর্ব-৪ : Laravel Middleware
Laravel Framework এ 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 করতে পারেন।
৫. এবং আরো অনেক কিছু
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 এ নিচের মতো রেজাল্ট দেখাবে :
এখন আপনার app/Http/Middleware ফোল্ডারে checkAge নামে একটা middleware তৈরী হয়েগেছে ঠিক নিচের মতো :
এবং আপনার 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, ];
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
আপনার ব্রাউজার এর ফলাফল নিচের মত আসবে:
আর যদি আপনি age 30 এর কম দেন তাহলে নিচের মতো রেজাল্ট আসবে। এবার নিচের URL টি ব্রাউজার এ দিয়ে হিট করুন :
http://localhost:8000/showage?age=15