Zend Framework (এখন Laminas) এ রাউটার (Router) ব্যবহৃত হয় URL রিকোয়েস্টগুলোকে সঠিক কন্ট্রোলার এবং অ্যাকশনের সাথে যুক্ত করার জন্য। এটি HTTP রিকোয়েস্টের URL থেকে তথ্য সংগ্রহ করে এবং সেই তথ্যকে ভিত্তি করে উপযুক্ত কন্ট্রোলার এবং অ্যাকশন মেথড নির্বাচন করে। রাউটিং সিস্টেম কনফিগারেশন দ্বারা আপনি কীভাবে URL রিকোয়েস্টগুলো হ্যান্ডেল করবেন তা নিয়ন্ত্রণ করতে পারবেন।
এখানে, আমরা রাউটার রিস্ট্রাকচার এবং এর কনফিগারেশন পদ্ধতি নিয়ে আলোচনা করব।
রাউটার কনফিগারেশন
Zend Framework (Laminas) এর রাউটিং সিস্টেম কনফিগার করার জন্য module.config.php ফাইল ব্যবহার করা হয়। এই ফাইলে আপনি রাউটিংয়ের নিয়ম, পাথ, কন্ট্রোলার এবং অ্যাকশন মেথডগুলির সাথে URL এর মেলবন্ধন কনফিগার করতে পারেন।
রাউটার কনফিগারেশন ফাইল
module.config.php ফাইলে রাউটিং কনফিগারেশন সংযুক্ত করা হয়। উদাহরণস্বরূপ:
return [
'router' => [
'routes' => [
'home' => [
'type' => 'Literal',
'options' => [
'route' => '/home',
'defaults' => [
'controller' => 'Application\Controller\Index',
'action' => 'index',
],
],
],
'product' => [
'type' => 'Segment',
'options' => [
'route' => '/product[/:action]',
'defaults' => [
'controller' => 'Application\Controller\Product',
'action' => 'index',
],
],
],
],
],
];
এখানে দুটি রাউট রয়েছে:
- home রাউটটি
/homeপাথের জন্য কনফিগার করা হয়েছে এবং এটিApplication\Controller\Indexকন্ট্রোলারেরindexঅ্যাকশন মেথডে পাঠাবে। - product রাউটটি
/productপাথের জন্য তৈরি করা হয়েছে এবং এটি/product/:actionসেগমেন্ট রাউটের মাধ্যমেProductControllerএর অ্যাকশন মেথড নির্ধারণ করবে।
রাউট টাইপ
Zend Framework এ রাউট টাইপ মূলত URL রিকোয়েস্ট কীভাবে মেলানো হবে তা নির্ধারণ করে। কিছু সাধারণ রাউট টাইপ হলো:
১. Literal রাউট
Literal রাউট সুনির্দিষ্ট এবং পূর্ণাঙ্গ URL পাথে মেলানোর জন্য ব্যবহৃত হয়। এটি সাধারণত একক পৃষ্ঠার অ্যাপ্লিকেশনে ব্যবহৃত হয়।
'home' => [
'type' => 'Literal',
'options' => [
'route' => '/home',
'defaults' => [
'controller' => 'Application\Controller\Index',
'action' => 'index',
],
],
];
২. Segment রাউট
Segment রাউট ব্যবহার করে URL এর কিছু অংশকে ভেরিয়েবল হিসেবে ব্যবহার করা যায়। যেমন: /product/:id যেখানে :id একটি ডায়নামিক প্যারামিটার।
'product' => [
'type' => 'Segment',
'options' => [
'route' => '/product/:id',
'defaults' => [
'controller' => 'Application\Controller\Product',
'action' => 'view',
],
],
];
এখানে, :id হলো একটি ডায়নামিক অংশ যা URL থেকে তথ্য নিয়ে কন্ট্রোলারে পাঠানো হবে।
৩. Regex রাউট
Regex রাউট URL প্যাটার্ন মেলানোর জন্য নিয়মিত অভিব্যক্তি (regex) ব্যবহার করা হয়। এটি আরো জটিল এবং উন্নত রাউটিং কনফিগারেশনগুলোর জন্য উপযুক্ত।
'search' => [
'type' => 'Regex',
'options' => [
'route' => '/search/[:term]',
'defaults' => [
'controller' => 'Application\Controller\Search',
'action' => 'index',
],
],
];
এখানে, :term কনফিগারেশনটি নিয়মিত অভিব্যক্তির মাধ্যমে কোন আর্গুমেন্ট নিবে তা নির্ধারণ করবে।
রাউট প্যারামিটার
Zend Framework রাউটের মাধ্যমে প্যারামিটার পাস করা যায় যেগুলো পরে কন্ট্রোলারে ব্যবহার করা হবে। যেমন:
'product' => [
'type' => 'Segment',
'options' => [
'route' => '/product/:id',
'defaults' => [
'controller' => 'Application\Controller\Product',
'action' => 'view',
],
],
];
এখানে :id একটি প্যারামিটার যা ProductController এর viewAction মেথডে পাস হবে।
প্যারামিটার প্রাপ্তি
কন্ট্রোলারে প্যারামিটার গ্রহণ করা হয়:
use Laminas\Mvc\Controller\AbstractActionController;
class ProductController extends AbstractActionController
{
public function viewAction()
{
$id = $this->params()->fromRoute('id', null); // :id প্যারামিটার গ্রহণ
return new ViewModel(['id' => $id]);
}
}
এখানে fromRoute('id', null) দিয়ে রাউট থেকে id প্যারামিটার গ্রহণ করা হচ্ছে।
রাউট কনফিগারেশন কাস্টমাইজেশন
Zend Framework এ রাউট কনফিগারেশনে আপনি কিছু কাস্টম কনফিগারেশনও যোগ করতে পারেন, যেমন:
Controller এবং Action ডিফল্ট সেটিংস
আপনি প্রতিটি রাউটে ডিফল্ট কন্ট্রোলার এবং অ্যাকশন সেট করতে পারেন, যাতে রিকোয়েস্টের সময় নির্দিষ্ট কন্ট্রোলার ও অ্যাকশন মেথড স্বয়ংক্রিয়ভাবে ব্যবহৃত হয়।
'home' => [
'type' => 'Literal',
'options' => [
'route' => '/home',
'defaults' => [
'controller' => 'Application\Controller\Index',
'action' => 'index',
],
],
];
কনফিগারেশন ডিপেনডেন্সি ইনজেকশন
Zend Framework রাউটার কনফিগারেশনের মধ্যে কাস্টম প্যারামিটার বা ডিপেনডেন্সি ইনজেকশনও ব্যবহার করা যেতে পারে:
'product' => [
'type' => 'Segment',
'options' => [
'route' => '/product/:id',
'defaults' => [
'controller' => 'Application\Controller\Product',
'action' => 'view',
],
],
'may_terminate' => true,
'child_routes' => [
'details' => [
'type' => 'Literal',
'options' => [
'route' => '/details',
'defaults' => [
'controller' => 'Application\Controller\Product',
'action' => 'details',
],
],
],
],
];
এখানে, আপনি একটি child route তৈরি করেছেন যা /product/:id/details URL রিকোয়েস্টে মেলে।
সারাংশ
Zend Framework (Laminas) এর রাউট কনফিগারেশন অত্যন্ত ফ্লেক্সিবল এবং কাস্টমাইজযোগ্য।
- Literal, Segment, এবং Regex রাউট টাইপগুলি ব্যবহার করে URL রিকোয়েস্টের সাথে কন্ট্রোলার এবং অ্যাকশন মেলানো যায়।
- আপনি রাউটের মাধ্যমে প্যারামিটার পাস করতে পারেন এবং সেগুলি কন্ট্রোলারে ব্যবহার করতে পারেন।
- রাউট কনফিগারেশন কাস্টমাইজেশন ও child routes ব্যবহার করে আরও জটিল রাউটিং ব্যবস্থাও তৈরি করা সম্ভব।
এছাড়া, Zend Framework রাউটিং সিস্টেমের মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনটির URL স্ট্রাকচার এবং তার আচরণ পুরোপুরি নিয়ন্ত্রণ করতে পারেন।
Read more