Laravel Middleware Priority

Laravel একটি শক্তিশালী ও জনপ্রিয় PHP ফ্রেমওয়ার্ক যা MVC (Model-View-Controller) প্যাটার্ন অনুসরণ করে। Middleware হলো Laravel-এর একটি অত্যন্ত গুরুত্বপূর্ণ ফিচার যা HTTP অনুরোধ আসার আগে ও পরে কিছু নির্দিষ্ট কাজ সম্পাদন করতে সাহায্য করে।
এই ব্লগে আমরা আলোচনা করব Middleware Priority নিয়ে – কেন এটা গুরুত্বপূর্ণ, Laravel কিভাবে Middleware গুলোর execution order নির্ধারণ করে, এবং কিভাবে আপনি কাস্টম প্রায়োরিটি সেট করতে পারেন।
🧩 Middleware কী?
Middleware হলো এমন একটি লেয়ার যেটি আপনার অ্যাপ্লিকেশনের HTTP রিকোয়েস্ট ও রেসপন্সের মাঝখানে কাজ করে। যেমন:
ইউজার অথেন্টিকেশন চেক
রোল/পারমিশন যাচাই
XSS বা CSRF প্রোটেকশন
API রেট লিমিট
আপনি middleware ব্যবহার করে রিকোয়েস্ট ফিল্টার করতে পারেন এবং কিছু নির্দিষ্ট রুল প্রয়োগ করতে পারেন।
📜 Middleware Execution Order
Laravel-এ অনেক middleware থাকে – কিছু গ্লোবালি (global middleware) থাকে, কিছু রাউট-ভিত্তিক (route middleware) হিসেবে ব্যবহৃত হয়। কিন্তু প্রশ্ন হলো, যদি একাধিক middleware থাকে, তাহলে Laravel কোনটা আগে execute করবে?
Laravel এই ক্ষেত্রে priority অনুসরণ করে।
🔃 Middleware Priority কেন গুরুত্বপূর্ণ?
ধরুন, আপনার দুটি middleware আছে:
EncryptCookies– এটি রিকোয়েস্ট/রেসপন্সে কুকি এনক্রিপ্ট করেStartSession– এটি session চালু করে
এখানে প্রথমে EncryptCookies চালু না হলে StartSession সঠিকভাবে কাজ করবে না। তাই Laravel একটি middleware priority list মেইনটেইন করে।
🏗️ Laravel Middleware Priority কোথায় সেট করা হয়?
Middleware priority list ডিফাইন করা হয় app/Http/Kernel.php ফাইলে। নিচে একটি উদাহরণ দেওয়া হলো:
protected $middlewarePriority = [
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\Authenticate::class,
\Illuminate\Routing\Middleware\ThrottleRequests::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Cookie\Middleware\EncryptCookies::class,
];
এই লিস্টটি Laravel কে বলে দেয় কোন middleware আগে চলবে এবং কোনটা পরে।
🛠️ কাস্টম Middleware এর Priority কিভাবে নির্ধারণ করবেন?
ধরুন, আপনি একটি কাস্টম middleware তৈরি করেছেন CheckUserActive নামে:
php artisan make:middleware CheckUserActive
এখন আপনি চান এটি Authenticate middleware এর আগে চলে। এজন্য Kernel.php ফাইলে $middlewarePriority এর মধ্যে আপনার middleware যুক্ত করুন:
protected $middlewarePriority = [
\App\Http\Middleware\CheckUserActive::class,
\App\Http\Middleware\Authenticate::class,
...
];
Note:
$middlewarePriorityশুধুমাত্র route middleware এর ক্ষেত্রে কার্যকর।
🧠 কিছু বাস্তব উদাহরণ
✅ সঠিক অর্ডার:
[
EncryptCookies::class,
AddQueuedCookiesToResponse::class,
StartSession::class,
AuthenticateSession::class,
]
❌ ভুল অর্ডার:
[
StartSession::class,
EncryptCookies::class,
]
উপরে ভুল অর্ডারে StartSession কুকি রিড করার আগেই session শুরু করার চেষ্টা করবে, ফলে সমস্যা হতে পারে।
🔐 Global vs Route Middleware
Global Middleware: সব রিকোয়েস্টের জন্য কার্যকর।
Route Middleware: নির্দিষ্ট রাউট বা গ্রুপে প্রয়োগ হয়।
Priority শুধুমাত্র route middleware এর জন্য প্রযোজ্য।
Middleware priority Laravel অ্যাপ্লিকেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ একটি বিষয়। সঠিক execution order নিশ্চিত না হলে আপনার authentication, session, কিংবা cookie system ঠিকমতো কাজ নাও করতে পারে।
আপনি যদি কাস্টম middleware তৈরি করেন, তাহলে অবশ্যই তার priority সঠিকভাবে সেট করুন Kernel.php ফাইলে।




