Phalcon ফ্রেমওয়ার্কে Middleware এবং Filters ব্যবহারের মাধ্যমে আপনি HTTP রিকোয়েস্ট হ্যান্ডলিংকে আরও শক্তিশালী এবং নমনীয় করতে পারেন। Middleware এবং Filters উভয়ই অ্যাপ্লিকেশনে রিকোয়েস্ট এবং রেসপন্স প্রসেসিংকে কাস্টমাইজ করতে সহায়ক, তবে তাদের কাজের ধরণ কিছুটা ভিন্ন।
এটি ব্যবহার করে আপনি রিকোয়েস্ট এবং রেসপন্সের উপর নির্দিষ্ট লজিক প্রয়োগ করতে পারেন, যেমন রিকোয়েস্ট অটেনটিকেশন, ভ্যালিডেশন, বা রেসপন্সের ফরম্যাট পরিবর্তন। এখানে আমরা Phalcon ফ্রেমওয়ার্কে Middleware এবং Filters এর মাধ্যমে রিকোয়েস্ট হ্যান্ডলিং কিভাবে করা যায়, তা বিস্তারিতভাবে আলোচনা করব।
Phalcon এ Middleware
Middleware হল একটি ফাংশন বা ক্লাস যা HTTP রিকোয়েস্ট প্রক্রিয়াকরণের পথে বসে এবং এর মাধ্যমে আপনি কিছু প্রক্রিয়া প্রয়োগ করতে পারেন, যেমন রিকোয়েস্ট লজিক, অথেন্টিকেশন, লগিং বা রেসপন্স মডিফিকেশন। Phalcon-এ Middleware ব্যবহারের জন্য, আপনি Dispatcher অথবা EventsManager ব্যবহার করতে পারেন।
Middleware এর কাজ
- Request pre-processing: রিকোয়েস্ট অ্যাপ্লিকেশনের মধ্যে প্রবেশ করার আগে তার উপর কিছু লজিক প্রয়োগ করতে পারেন।
- Response post-processing: রেসপন্স তৈরি হওয়ার পরে, কিন্তু ক্লায়েন্টের কাছে ফেরত পাঠানোর আগে সেটি মডিফাই করতে পারেন।
- Error handling: যদি কোনো সমস্যা হয়, তবে সেগুলোর জন্য ক্যাচ করতে এবং উপযুক্ত রেসপন্স প্রদান করতে সহায়ক।
Phalcon-এ Middleware তৈরি করা
Phalcon এর Middleware সাধারণত EventsManager অথবা Dispatcher ব্যবহার করে তৈরি করা হয়। উদাহরণস্বরূপ:
use Phalcon\Mvc\Dispatcher;
use Phalcon\Events\Event;
use Phalcon\Mvc\Controller;
class Middleware
{
public function beforeDispatch(Event $event, Dispatcher $dispatcher)
{
// Check if the request has a valid token for API access
$authHeader = $dispatcher->getDI()->get('request')->getHeader('Authorization');
if (!$authHeader) {
// If there's no token, return unauthorized response
$dispatcher->getDI()->get('response')->setStatusCode(401, 'Unauthorized');
return false;
}
return true; // Continue with the request
}
}
এখানে, beforeDispatch মেথডটি beforeDispatch ইভেন্টে ক্যাপচার করা হয়েছে, যা রিকোয়েস্ট ডিসপ্যাচ হওয়ার আগে একটি অথেন্টিকেশন চেক করে। যদি হেডারে Authorization টোকেন না থাকে, তবে একটি 401 (Unauthorized) রেসপন্স রিটার্ন করা হবে।
Middleware রেজিস্টার করা
এখন, এই Middleware কে EventsManager এর মাধ্যমে রেজিস্টার করতে হবে:
$di->setShared('middleware', function() {
return new Middleware();
});
// Attach the middleware to the events manager
$eventsManager = new Phalcon\Events\Manager();
$eventsManager->attach('dispatch:beforeDispatch', $di->get('middleware'));
এখানে, beforeDispatch ইভেন্টের মাধ্যমে Middleware রেজিস্টার করা হয়েছে। এটি রিকোয়েস্ট প্রসেসিংয়ের আগে কার্যকর হবে।
Phalcon এ Filters
Filters হল রিকোয়েস্টের উপর নির্দিষ্ট কার্যক্রম প্রয়োগ করতে ব্যবহৃত একটি ফিচার। Filters সাধারণত রিকোয়েস্ট ডেটাকে ফিল্টার করে বা ম্যানিপুলেট করে এবং ডেটা প্রক্রিয়া করার পূর্বে বা পরে এর উপর কিছু কার্যক্রম প্রয়োগ করে।
Phalcon-এ Before/After Filters এবং Custom Filters সহ বিভিন্ন ধরনের ফিল্টার ব্যবহৃত হতে পারে। উদাহরণস্বরূপ:
Before Filter Example
use Phalcon\Mvc\Controller;
class UsersController extends Controller
{
public function beforeExecuteRoute()
{
// This is a "before filter" that will be executed before every action
if (!$this->session->has('user_id')) {
$this->response->redirect('/login');
return false; // Stop the action from being executed
}
}
public function indexAction()
{
echo "This is a protected page!";
}
}
এখানে, beforeExecuteRoute ফিল্টারটি ব্যবহারকারীর লগিন অবস্থান চেক করে, যদি ব্যবহারকারী লগইন না থাকে তবে তাকে লগিন পেজে রিডাইরেক্ট করে।
After Filter Example
use Phalcon\Mvc\Controller;
class UsersController extends Controller
{
public function afterExecuteRoute()
{
// This is an "after filter" that will be executed after every action
$this->response->setHeader('X-Custom-Header', 'Custom Value');
}
public function indexAction()
{
echo "This is a response with a custom header!";
}
}
এখানে, afterExecuteRoute ফিল্টারটি ব্যবহৃত হয়েছে রেসপন্সের পর একটি কাস্টম হেডার যোগ করার জন্য। এটি প্রতিটি অ্যাকশনের শেষে কার্যকর হবে।
Custom Filter Example
use Phalcon\Mvc\Controller;
use Phalcon\Mvc\Micro;
$app = new Micro();
// Define a custom filter to check if the user is authenticated
$app->before(function () use ($app) {
if (!$app->session->has('user_id')) {
$app->response->redirect('/login');
return false;
}
return true;
});
$app->get('/dashboard', function () {
echo "Welcome to the Dashboard!";
});
$app->handle();
এখানে, একটি কাস্টম ফিল্টার তৈরি করা হয়েছে যা /dashboard রাউটে অ্যাক্সেস করার আগে ব্যবহারকারীকে লগইন চেক করে।
Middleware এবং Filters এর মধ্যে পার্থক্য
- Middleware সাধারণত রিকোয়েস্ট ও রেসপন্স প্রক্রিয়ার মাঝখানে অবস্থান নেয় এবং প্রক্রিয়াকরণের আগে বা পরে কিছু লজিক প্রয়োগ করতে পারে।
- Filters সাধারণত রিকোয়েস্টের আগে বা পরে কিছু কার্যক্রম চালায় এবং এর মাধ্যমে নির্দিষ্ট অ্যাকশনে লজিক প্রয়োগ করা যায়।
সারাংশ
Phalcon ফ্রেমওয়ার্কে Middleware এবং Filters ব্যবহার করে আপনি রিকোয়েস্ট হ্যান্ডলিংয়ের উপর আরও নিয়ন্ত্রণ পেতে পারেন। Middleware প্রধানত রিকোয়েস্টের পুরো প্রক্রিয়া জুড়ে নির্দিষ্ট কার্যক্রম পরিচালনা করে এবং Filters নির্দিষ্ট অ্যাকশনগুলির আগে বা পরে কার্যকর হয়। এর মাধ্যমে আপনি নিরাপত্তা, রিকোয়েস্ট ভ্যালিডেশন, অথবা রেসপন্স কাস্টমাইজেশন করতে পারেন। Phalcon-এ এই দুটি ফিচার ব্যবহারের মাধ্যমে আপনি আরও মডুলার এবং কাস্টমাইজড API তৈরি করতে পারবেন।