Zend Framework (এখন Laminas) এ রাউটিং হল অ্যাপ্লিকেশনের ইউআরএল এবং কন্ট্রোলার অ্যাকশনের মধ্যে সংযোগ স্থাপন করার একটি গুরুত্বপূর্ণ উপাদান। সাধারণত, Zend Framework এর রাউটার কম্পোনেন্ট নির্দিষ্ট রাউট প্যাটার্ন অনুযায়ী ইউআরএল গুলি কন্ট্রোলার অ্যাকশনে ম্যাপ করে। কখনও কখনও, আপনার কাস্টম রাউট প্যাটার্ন তৈরি করতে হতে পারে যা সাধারণ রাউটিং প্যাটার্ন থেকে আলাদা বা বিশেষ প্রয়োজনীয়তার জন্য কাস্টমাইজড।
Zend Framework (এখন Laminas) এ কাস্টম রাউট প্যাটার্ন তৈরি করা একেবারেই সম্ভব এবং এটি অ্যাপ্লিকেশনের কাস্টম রাউট লজিক বা বিশেষ ধরনের ইউআরএল স্ট্রাকচারের জন্য ব্যবহৃত হয়।
কাস্টম রাউট প্যাটার্ন তৈরি করার জন্য ধাপ
- Router Configuration: প্রথমে আপনাকে রাউটার কনফিগারেশন ফাইলে কাস্টম রাউট প্যাটার্ন তৈরি করতে হবে।
- Custom Route Class: তারপর কাস্টম রাউট ক্লাস তৈরি করতে হবে যা Zend Framework এর রাউটারের সাথে কাজ করবে।
- Map URL to Controller: কাস্টম রাউট প্যাটার্নটি URL এবং Controller অ্যাকশনের সাথে ম্যাপ করবে।
১. কাস্টম রাউট প্যাটার্ন তৈরি করা
Zend Framework এ কাস্টম রাউট প্যাটার্ন তৈরি করতে হলে Zend\Router এর সাহায্যে রাউট কনফিগারেশন ফাইলটি সেটআপ করতে হবে। উদাহরণস্বরূপ, একটি কাস্টম রাউট প্যাটার্ন তৈরি করা যেটি /product/details/:id এর মতো ইউআরএল প্যাটার্নে কাজ করবে।
রাউটার কনফিগারেশন ফাইল এ কাস্টম রাউট প্যাটার্ন যোগ করা
প্রথমে, module.config.php বা module.config.php ফাইলে কাস্টম রাউট প্যাটার্ন যোগ করতে হবে।
module.config.php ফাইলে রাউট কনফিগারেশন:
namespace Application;
return [
'router' => [
'routes' => [
'product-details' => [
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => [
'route' => '/product/details[/:id]',
'defaults' => [
'controller' => 'Application\Controller\Product',
'action' => 'details',
],
'constraints' => [
'id' => '[0-9]+', // id কেবলমাত্র সংখ্যা হতে হবে
],
],
],
],
],
];
এখানে, /product/details/:id ইউআরএল প্যাটার্নে একটি কাস্টম রাউট তৈরি করা হয়েছে।
type: এখানেZend\Mvc\Router\Http\Segmentরাউট টাইপ ব্যবহার করা হয়েছে যা সেগমেন্ট বেসড রাউটিং প্যাটার্ন ব্যবহার করতে সহায়তা করে।route:/product/details[/:id]ইউআরএল প্যাটার্ন, যেখানে:idহল একটি ডাইনামিক সেগমেন্ট।defaults: ডিফল্ট কন্ট্রোলার এবং অ্যাকশন সেট করা হয়েছে।constraints:idপ্যারামিটারের জন্য একটি কনস্ট্রেইন্ট নির্ধারণ করা হয়েছে যাতে এটি শুধুমাত্র সংখ্যার মান গ্রহণ করতে পারে।
২. কাস্টম রাউট ক্লাস তৈরি করা
Zend Framework এ আপনি চাইলে Custom Route Class তৈরি করে কাস্টম রাউটিং লজিক যুক্ত করতে পারেন। এটি তখন ব্যবহৃত হবে যখন আপনার রাউট প্যাটার্ন আরও জটিল বা কাস্টম লজিক প্রয়োগের প্রয়োজন হয়।
কাস্টম রাউট ক্লাস তৈরি করা
আপনার রাউটারের কাস্টম লজিক তৈরি করতে একটি ক্লাস তৈরি করতে হবে যা Zend\Mvc\Router\RouteInterface ইন্টারফেস ইমপ্লিমেন্ট করবে।
CustomRoute.php:
namespace Application\Router;
use Zend\Mvc\Router\RouteInterface;
use Zend\Mvc\Router\Http\RouteMatch;
use Zend\Mvc\Router\Http\TreeRouteStack;
use Zend\Stdlib\RequestInterface;
use Zend\Stdlib\ResponseInterface;
class CustomRoute implements RouteInterface
{
protected $routeMatch;
public function match(RequestInterface $request)
{
$path = $request->getUri()->getPath();
// কাস্টম লজিক ব্যবহার করে রাউট মেলানো হচ্ছে
if (preg_match('/^\/product\/details\/(\d+)$/', $path, $matches)) {
// রাউট মেলানোর পর রাউট মাচ তৈরি
$this->routeMatch = new RouteMatch([
'controller' => 'Application\Controller\Product',
'action' => 'details',
'id' => $matches[1], // ডাইনামিক `id` ভ্যালু
]);
return $this->routeMatch;
}
return null;
}
public function assemble(array $params = [], $options = [])
{
// যদি কাস্টম রাউট অ্যাসেম্বল করতে হয়
return '/product/details/' . $params['id'];
}
}
এই CustomRoute ক্লাসে একটি কাস্টম রাউট লজিক লেখা হয়েছে যা /product/details/{id} রাউট প্যাটার্ন অনুযায়ী কাজ করে। এখানে রেগুলার এক্সপ্রেশন (Regex) ব্যবহার করা হয়েছে যেটি ইউআরএল থেকে id প্যারামিটারটি মেলে এবং তা রাউট ম্যাচে যোগ করা হয়।
৩. কাস্টম রাউট প্যাটার্ন রেজিস্টার করা
তিনটি ধাপে কাস্টম রাউট প্যাটার্ন তৈরি করার পর, আপনাকে এটি রেজিস্টার করতে হবে যাতে এটি Zend Framework এর রাউটার সিস্টেমে ব্যবহৃত হয়।
module.config.php এ রাউট প্যাটার্ন রেজিস্টার করা:
namespace Application;
return [
'router' => [
'routes' => [
'product-details' => [
'type' => 'Application\Router\CustomRoute', // কাস্টম রাউট টাইপ ব্যবহার করা হয়েছে
'options' => [
'route' => '/product/details[/:id]',
'defaults' => [
'controller' => 'Application\Controller\Product',
'action' => 'details',
],
],
],
],
],
];
এখানে, আমরা CustomRoute ক্লাসটি রেজিস্টার করেছি এবং এটি product-details রাউট প্যাটার্নে ব্যবহৃত হচ্ছে।
৪. কন্ট্রোলার এবং অ্যাকশন তৈরি করা
রাউট প্যাটার্নটি তৈরি করার পর, এখন কন্ট্রোলার এবং অ্যাকশন তৈরি করতে হবে যা এই রাউট থেকে ডাটা গ্রহণ করবে।
ProductController.php:
namespace Application\Controller;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
class ProductController extends AbstractActionController
{
public function detailsAction()
{
$id = $this->params()->fromRoute('id'); // রাউট থেকে id পাওয়া
return new ViewModel([
'productId' => $id,
]);
}
}
এখানে, detailsAction() মেথডে আমরা রাউট থেকে id প্যারামিটারটি গ্রহণ করছি এবং তা ভিউতে পাঠাচ্ছি।
সারাংশ
Zend Framework (এখন Laminas) এ কাস্টম রাউট প্যাটার্ন তৈরি করা খুবই সহজ। আপনি Zend\Mvc\Router\Http\Segment অথবা একটি কাস্টম রাউট ক্লাস তৈরি করে নিজস্ব রাউট প্যাটার্ন তৈরি করতে পারেন। এর মাধ্যমে আপনি বিশেষ ধরনের ইউআরএল প্যাটার্ন, যেমন /product/details/:id, তৈরি করতে পারবেন। রাউট প্যাটার্ন এবং কন্ট্রোলার অ্যাকশন সঠিকভাবে ম্যাপ করা হলে আপনার অ্যাপ্লিকেশন আরও বেশি ফ্লেক্সিবল এবং কাস্টমাইজযোগ্য হয়ে উঠবে।
Read more