Routing হলো CodeIgniter এর একটি গুরুত্বপূর্ণ ফিচার, যা URL এবং অ্যাপ্লিকেশনের কন্ট্রোলারের মধ্যে সংযোগ স্থাপন করে। Routing ব্যবহার করে আপনি অ্যাপ্লিকেশনের URL গুলোকে নিয়ন্ত্রণ করতে পারেন এবং ডিফল্ট কন্ট্রোলার বা মেথডের পরিবর্তে কাস্টম রুট সেট করতে পারেন।
Routing মূলত নির্ধারণ করে যে ব্যবহারকারীর রিকোয়েস্ট করা URL এর জন্য কোন কন্ট্রোলার এবং মেথড কার্যকর হবে। এটি URL এবং কন্ট্রোলার মেথডের মধ্যে একটি সেতু হিসাবে কাজ করে।
CodeIgniter এর Routing সিস্টেম ফাইলটি application/config/routes.php
-এ অবস্থিত।
routes.php
ফাইলটি কিছু ডিফল্ট সেটিংস সহ আসে। একটি সাধারণ Routing ফাইল এরকম দেখতে পারে:
$route['default_controller'] = 'Welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
উদাহরণ:
$route['default_controller'] = 'Home';
উদাহরণ:
$route['404_override'] = 'errors/page_not_found';
-
) চিহ্নকে _
(আন্ডারস্কোর) এ রূপান্তর করে।উদাহরণ:
$route['translate_uri_dashes'] = TRUE;
উদাহরণ:
$route['about'] = 'Pages/about';
এখানে http://localhost/about
URL চালালে Pages
কন্ট্রোলারের about
মেথড চালু হবে।
উদাহরণ:
$route['product/(:num)'] = 'Product/show/$1';
এখানে (:num)
শুধুমাত্র সংখ্যা গ্রহণ করে। যদি http://localhost/product/123
চালানো হয়, তাহলে Product
কন্ট্রোলারের show
মেথডে 123
প্যারামিটার পাস করা হবে।
(:any)
ব্যবহার করা হয়।উদাহরণ:
$route['blog/(:any)'] = 'Blog/post/$1';
এখানে (:any)
যেকোনো স্ট্রিং গ্রহণ করবে। যেমন: http://localhost/blog/my-first-post
।
আপনার অ্যাপ্লিকেশনে রুট নির্ধারণ করতে শুধুমাত্র নির্দিষ্ট HTTP মেথড (GET, POST) ব্যবহার করতে পারেন। উদাহরণ:
$route['post/create']['post'] = 'PostController/create';
$route['post/create']['get'] = 'PostController/form';
এখানে:
PostController/create
চালু হবে।PostController/form
চালু হবে।$route['default_controller'] = 'Home';
$route['404_override'] = 'errors/not_found';
$route['translate_uri_dashes'] = TRUE;
$route['about'] = 'Pages/about';
$route['services'] = 'Pages/services';
$route['contact'] = 'Pages/contact';
$route['product/(:num)'] = 'Product/details/$1';
$route['blog/(:any)'] = 'Blog/post/$1';
CodeIgniter এর Routing সিস্টেম অ্যাপ্লিকেশনের URL এবং কন্ট্রোলার মেথডের মধ্যে সংযোগ তৈরি করে। এটি URL কাস্টমাইজেশন, SEO-বান্ধব স্ট্রাকচার, এবং ডাইনামিক পেজ তৈরি করতে অত্যন্ত কার্যকর।
Routes হলো CodeIgniter-এর একটি গুরুত্বপূর্ণ ফিচার, যা URL এবং কন্ট্রোলারের মেথড-এর মধ্যে সম্পর্ক স্থাপন করে। এটি ব্যবহারকারীর রিকোয়েস্ট অনুযায়ী নির্দিষ্ট কন্ট্রোলার এবং মেথড লোড করার জন্য ব্যবহৃত হয়। Routes কনফিগার করার মাধ্যমে আপনি ডিফল্ট রাউট, কাস্টম URL, এবং ডাইনামিক রাউট তৈরি করতে পারেন।
CodeIgniter এ Routes কনফিগারেশন ফাইলটি app/Config/Routes.php
ডিরেক্টরিতে অবস্থিত। এই ফাইলেই সমস্ত রাউট ডিফাইন করা হয়।
CodeIgniter এর ডিফল্ট রাউট নির্ধারণ করা হয় Routes.php
ফাইলে।
ডিফল্ট রাউট উদাহরণ:
$routes->setDefaultController('Home'); // Home কন্ট্রোলার ডিফল্ট
$routes->setDefaultMethod('index'); // index() মেথড ডিফল্ট
http://localhost/your_project/
আপনার নির্দিষ্ট URL-কে একটি নির্দিষ্ট কন্ট্রোলার এবং মেথডের সাথে ম্যাপ করতে কাস্টম রাউট ব্যবহার করুন।
কাস্টম রাউট উদাহরণ:
$routes->get('about', 'Pages::about'); // 'about' URL-এ 'Pages' কন্ট্রোলারের 'about' মেথড
http://localhost/your_project/about
ডাইনামিক রাউট ব্যবহার করে URL এর ভেরিয়েবল অংশ ধরতে পারেন।
ডাইনামিক রাউট উদাহরণ:
$routes->get('product/(:num)', 'Product::details/$1'); // URL-এ সংখ্যাকে ক্যাপচার করে
(:num)
: শুধুমাত্র সংখ্যা গ্রহণ করবে।(:any)
: যে কোনো অক্ষর বা সংখ্যা গ্রহণ করবে।http://localhost/your_project/product/123
RESTful API তৈরি করতে CodeIgniter এ resource
রাউট ব্যবহার করা হয়।
RESTful রাউট উদাহরণ:
$routes->resource('products');
এটি স্বয়ংক্রিয়ভাবে নিম্নলিখিত রাউট তৈরি করে:
/products
→ সমস্ত প্রোডাক্ট লিস্ট/products
→ নতুন প্রোডাক্ট যোগ/products/1
→ ID 1 এর প্রোডাক্ট ডিটেইলস/products/1
→ ID 1 এর প্রোডাক্ট আপডেট/products/1
→ ID 1 এর প্রোডাক্ট ডিলিটআপনার URL থেকে প্যারামিটার ক্যাপচার করতে পারেন।
$routes->get('blog/(:any)/(:num)', 'Blog::post/$1/$2');
http://localhost/your_project/blog/title/123
$1
→ title
$2
→ 123
প্যারামিটারের জন্য নিয়ম নির্ধারণ করতে পারেন।
$routes->get('user/(:alpha)', 'User::profile/$1'); // শুধুমাত্র অক্ষর গ্রহণ করবে
Routes এর সাথে Middleware বা Filter ব্যবহার করে নির্দিষ্ট পৃষ্ঠা সুরক্ষিত করতে পারেন।
$routes->get('dashboard', 'Dashboard::index', ['filter' => 'auth']);
এটি নিশ্চিত করে যে auth
ফিল্টার চেক করা হবে এবং শুধুমাত্র অথরাইজড ব্যবহারকারীরাই dashboard
অ্যাক্সেস করতে পারবে।
Routes চেক করার সময় সর্বাধিক নির্দিষ্ট রাউট সর্বপ্রথম কার্যকর হয়। তাই ডাইনামিক রাউটগুলোর আগে কাস্টম রাউট নির্ধারণ করা উচিত।
উদাহরণ:
$routes->get('blog/popular', 'Blog::popular'); // নির্দিষ্ট রাউট
$routes->get('blog/(:any)', 'Blog::post/$1'); // ডাইনামিক রাউট
Routes CodeIgniter এ URL গুলোকে সুসংগঠিত ও কার্যকরভাবে পরিচালনা করতে সাহায্য করে। সঠিকভাবে রাউট কনফিগার করলে অ্যাপ্লিকেশন দ্রুত এবং সুরক্ষিতভাবে কাজ করবে।
Routes CodeIgniter-এ URL এবং Controller এর মধ্যে সংযোগ স্থাপন করে। এটি নির্ধারণ করে যে, কোনো নির্দিষ্ট URL রিকোয়েস্ট কীভাবে প্রক্রিয়াজাত হবে এবং কোন Controller এবং Method কল হবে। CodeIgniter-এ দুটি প্রকারের Routes রয়েছে:
Static Routes ব্যবহার করে একটি নির্দিষ্ট URL এর জন্য নির্দিষ্ট Controller এবং Method কল করা হয়।
Static Route তৈরি করতে app/Config/Routes.php
ফাইলে নিচের মতো কোড লিখতে হয়:
$routes->get('about', 'Pages::about');
http://localhost/about
Pages::about
<?php
namespace App\Controllers;
class Pages extends BaseController {
public function about() {
echo "This is the About page.";
}
}
Dynamic Routes ব্যবহার করে URL এর অংশ হিসেবে ডাইনামিক ডেটা পাস করা যায়। এগুলো সাধারণত URL এর Parameter হিসাবে কাজ করে।
$routes->get('product/(:any)', 'Products::details/$1');
http://localhost/product/laptop
Products::details('laptop')
<?php
namespace App\Controllers;
class Products extends BaseController {
public function details($name) {
echo "Product Name: " . $name;
}
}
$routes->get('product/(:num)/(:alpha)', 'Products::details/$1/$2');
http://localhost/product/101/laptop
Products::details(101, 'laptop')
Controller Method:
public function details($id, $name) {
echo "Product ID: " . $id . " | Product Name: " . $name;
}
CodeIgniter একটি ডিফল্ট Route সেটআপ করে, যা index()
Method কল করে।
app/Config/Routes.php
ফাইলের মধ্যে ডিফল্ট Route সংজ্ঞায়িত করা হয়:
$routes->get('/', 'Home::index');
<?php
namespace App\Controllers;
class Home extends BaseController {
public function index() {
echo "Welcome to CodeIgniter!";
}
}
CodeIgniter বিভিন্ন HTTP Verbs (GET, POST, PUT, DELETE) এর জন্য Routes নির্ধারণ করতে পারে।
$routes->get('about', 'Pages::about');
$routes->post('form-submit', 'Forms::submit');
$routes->put('update-profile', 'Users::update');
$routes->delete('delete-user/(:num)', 'Users::delete/$1');
Named Routes ব্যবহার করে Route এর জন্য একটি নির্দিষ্ট নাম সেট করা যায়। এটি পরবর্তী সময়ে Route-কে সহজে রেফারেন্স করতে সাহায্য করে।
$routes->get('dashboard', 'Admin::dashboard', ['as' => 'admin_dashboard']);
return redirect()->route('admin_dashboard');
Routes ডিক্লারেশনের ক্রম গুরুত্বপূর্ণ। CodeIgniter প্রথমে ডিফাইন্ড Route পরীক্ষা করে। যদি মিলে যায়, সেটি এক্সিকিউট হয়।
$routes->get('product/123', 'Products::special');
$routes->get('product/(:num)', 'Products::details/$1');
http://localhost/product/123
→ Products::special
কল হবে।http://localhost/product/456
→ Products::details/$1
কল হবে।Routes এর সাথে Filters যোগ করে ডেটা যাচাই বা Middleware যুক্ত করা যায়।
$routes->get('admin', 'Admin::index', ['filter' => 'auth']);
CodeIgniter-এ Static এবং Dynamic Routes ব্যবহার করে অ্যাপ্লিকেশনের URL গুলি কার্যকরভাবে পরিচালনা করা যায়। সঠিক Routes সেটআপ করলে অ্যাপ্লিকেশন আরও মডুলার এবং রক্ষণাবেক্ষণযোগ্য হয়। Static Routes নির্দিষ্ট পেজের জন্য এবং Dynamic Routes ডাইনামিক ডেটা পাসের জন্য আদর্শ।
CodeIgniter-এ URI Routing হলো এমন একটি পদ্ধতি, যা ব্যবহারকারীর URL রিকোয়েস্টকে প্রাসঙ্গিক কন্ট্রোলার এবং মেথডের সাথে সংযুক্ত করে। এটি আপনাকে কাস্টম URL গঠন তৈরি করতে এবং ডিফল্ট রাউটিং পরিবর্তন করতে সহায়তা করে।
CodeIgniter-এ URI Routing ব্যবহৃত হয়:
ডিফল্টভাবে, CodeIgniter এর রাউটিং সিস্টেম app/Config/Routes.php
ফাইলে কনফিগার করা হয়।
CodeIgniter একটি ডিফল্ট রাউট প্রদান করে, যা app/Controllers/Home.php
এর index() মেথডে পয়েন্ট করে। এটি Routes.php
ফাইলে এভাবে নির্ধারিত থাকে:
$routes->get('/', 'Home::index');
এটি ব্রাউজারে http://localhost/your_project/
লোড করলে চালু হয়।
Custom Route তৈরি করতে Routes.php
ফাইলে নিচের কোড যোগ করুন:
$routes->get('products', 'ProductController::index');
এটি ব্রাউজারের http://localhost/your_project/products
URL-কে ProductController
এর index()
মেথডে রিডাইরেক্ট করবে।
Parameter সহ কাস্টম রাউট তৈরি করতে:
$routes->get('product/(:num)', 'ProductController::show/$1');
এখানে:
(:num)
: কেবল সংখ্যাসূচক মান গ্রহণ করবে।$1
: URL এর প্রথম প্যারামিটার।উদাহরণ:
http://localhost/your_project/product/5
Controller মেথড:
public function show($id)
{
echo "Product ID: " . $id;
}
যদি একাধিক প্যারামিটার প্রয়োজন হয়:
$routes->get('user/(:num)/order/(:num)', 'UserController::order/$1/$2');
এখানে:
$1
: প্রথম প্যারামিটার (user ID)।$2
: দ্বিতীয় প্যারামিটার (order ID)।উদাহরণ:
http://localhost/your_project/user/2/order/15
Controller মেথড:
public function order($userId, $orderId)
{
echo "User ID: " . $userId . ", Order ID: " . $orderId;
}
CodeIgniter বিভিন্ন ধরনের প্লেসহোল্ডার ব্যবহার করতে দেয়:
(:num)
: শুধুমাত্র সংখ্যা গ্রহণ করবে।(:alpha)
: শুধুমাত্র অক্ষর গ্রহণ করবে।(:alphanum)
: অক্ষর এবং সংখ্যা উভয় গ্রহণ করবে।(:any)
: যেকোনো কিছু গ্রহণ করবে (অক্ষর, সংখ্যা বা অন্যান্য)।(:segment)
: URL এর একটি সেগমেন্ট গ্রহণ করবে (এটি /
ব্যতীত যেকোনো কিছু)।GET, POST, PUT, DELETE ইত্যাদি HTTP মেথডের ভিত্তিতে কাস্টম রাউট তৈরি করা যায়।
$routes->post('submit-form', 'FormController::submit');
এটি শুধুমাত্র POST রিকোয়েস্ট গ্রহণ করবে।
$routes->put('update-product/(:num)', 'ProductController::update/$1');
এটি PUT রিকোয়েস্ট গ্রহণ করবে।
Route এর জন্য নাম নির্ধারণ করে ব্যবহার করা যায়। এটি বড় অ্যাপ্লিকেশনের জন্য উপকারী।
$routes->get('profile', 'UserController::profile', ['as' => 'user_profile']);
এখন আপনি এই রাউটকে এভাবে ব্যবহার করতে পারেন:
echo route_to('user_profile');
Route গুলোকে একটি গ্রুপে সংগঠিত করা যায়। উদাহরণ:
$routes->group('admin', function($routes) {
$routes->get('dashboard', 'AdminController::dashboard');
$routes->get('users', 'AdminController::users');
});
এখন:
http://localhost/your_project/admin/dashboard
http://localhost/your_project/admin/users
Route ফাইলে একটি fallback route নির্ধারণ করা যায়, যা রাউট না পাওয়া গেলে কাজ করে।
$routes->set404Override(function() {
echo "Page not found!";
});
$routes->get('/', 'HomeController::index');
$routes->get('products', 'ProductController::index');
$routes->get('product/(:num)', 'ProductController::show/$1');
$routes->post('product/add', 'ProductController::add');
$routes->put('product/update/(:num)', 'ProductController::update/$1');
$routes->delete('product/delete/(:num)', 'ProductController::delete/$1');
$routes->group('admin', function($routes) {
$routes->get('dashboard', 'AdminController::dashboard');
$routes->get('users', 'AdminController::users');
});
CodeIgniter-এ URI Routing কাস্টমাইজেশন অ্যাপ্লিকেশনের কার্যকারিতা বাড়ায় এবং ব্যবহারকারীর জন্য SEO-বান্ধব URL তৈরি করতে সহায়ক। Custom Routes, Route Parameters, এবং Named Routes ব্যবহার করে আপনি অ্যাপ্লিকেশনকে আরও সংগঠিত এবং ব্যবহারযোগ্য করতে পারেন।
Route Filters CodeIgniter-এ একটি শক্তিশালী বৈশিষ্ট্য, যা নির্দিষ্ট Routes-এ কার্যকলাপ সম্পাদনের আগে বা পরে কোড চালানোর সুযোগ দেয়। এটি সাধারণত Authentication, Authorization, Logging, অথবা অন্য কোনো প্রি-প্রসেসিং বা পোস্ট-প্রসেসিং কাজের জন্য ব্যবহৃত হয়।
Route Filter এর প্রধান কাজ হলো:
Filter তৈরি করতে app/Filters
ডিরেক্টরিতে একটি নতুন ক্লাস তৈরি করুন। উদাহরণস্বরূপ, একটি AuthFilter তৈরি করা যাক:
<?php
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class AuthFilter implements FilterInterface
{
public function before(RequestInterface $request, $arguments = null)
{
// Authentication চেক
if (! session()->get('isLoggedIn')) {
return redirect()->to('/login');
}
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
// কোনো অ্যাকশনের পরে কাজ করতে চাইলে এখানে কোড যোগ করুন
}
}
Filter নিবন্ধন করতে app/Config/Filters.php
ফাইল এডিট করুন:
<?php
namespace Config;
use CodeIgniter\Config\BaseConfig;
class Filters extends BaseConfig
{
public $aliases = [
'auth' => \App\Filters\AuthFilter::class,
];
public $globals = [
'before' => [],
'after' => [],
];
public $methods = [];
public $filters = [];
}
Route-এ Filter যোগ করতে app/Config/Routes.php
ফাইল এডিট করুন:
$routes->get('dashboard', 'Dashboard::index', ['filter' => 'auth']);
$routes->group('admin', ['filter' => 'auth'], function ($routes) {
$routes->get('dashboard', 'Admin::dashboard');
$routes->get('users', 'Admin::users');
});
Route Restriction সাধারণত Authentication এবং Authorization চেকের জন্য ব্যবহৃত হয়।
Controller এর নির্দিষ্ট মেথডে Filter যুক্ত করুন:
$routes->get('profile', 'User::profile', ['filter' => 'auth']);
Filter ফাইলের before()
মেথডে চেক করুন:
public function before(RequestInterface $request, $arguments = null)
{
if (! session()->get('isLoggedIn')) {
return redirect()->to('/login');
}
}
নির্দিষ্ট রোল চেক করে Route Restriction যুক্ত করা যায়।
Filter:
public function before(RequestInterface $request, $arguments = null)
{
$role = session()->get('role');
if ($role !== 'admin') {
return redirect()->to('/not-authorized');
}
}
Route:
$routes->get('admin', 'Admin::index', ['filter' => 'auth']);
সব Route-এ before বা after ফিল্টার চালানোর জন্য ব্যবহার করা হয়।
app/Config/Filters.php
ফাইল:
public $globals = [
'before' => ['auth'], // সমস্ত রিকোয়েস্টের আগে 'auth' চালাবে
'after' => [],
];
GET, POST, PUT, DELETE ইত্যাদি HTTP মেথডের জন্য আলাদা Filter চালানো যায়।
public $methods = [
'post' => ['csrf'], // POST মেথডের জন্য 'csrf' ফিল্টার চালাবে
];
নির্দিষ্ট Route-এ Filter চালানোর জন্য ব্যবহৃত হয় (উপরের উদাহরণ অনুযায়ী)।
Cross-Site Request Forgery (CSRF) এর সুরক্ষার জন্য একটি Filter:
public $aliases = [
'csrf' => \CodeIgniter\Filters\CSRF::class,
];
Route-এ যোগ করুন:
$routes->post('form-submit', 'FormController::submit', ['filter' => 'csrf']);
নির্দিষ্ট IP থেকে রিকোয়েস্ট সীমাবদ্ধ করার জন্য একটি Filter তৈরি করুন:
public function before(RequestInterface $request, $arguments = null)
{
$allowedIps = ['127.0.0.1', '192.168.0.1'];
$ip = $request->getIPAddress();
if (! in_array($ip, $allowedIps)) {
return redirect()->to('/not-authorized');
}
}
Filter চালানোর সময় কোনো সমস্যা হলে CodeIgniter এর Debug Toolbar ব্যবহার করে লজিক পরীক্ষা করুন।
log_message('debug', 'Filter executed successfully.');
Route Filter এবং Restriction ব্যবহার করে আপনি:
CodeIgniter-এর Filter সিস্টেম আপনাকে সহজে অ্যাপ্লিকেশন নিরাপত্তা এবং রিকোয়েস্ট পরিচালনা করতে সহায়তা করে।
Read more