Laravel: Routing Advanced ( লারাভেলের রাউটিং এডভান্সড বৈশিষ্ট্যগুলি শেখুন — রাউট গ্রুপ, মিডলওয়্যার, রেট লিমিটিং, মডেল বাইন্ডিং ) — Part 11

Abu Sayed
3 min readFeb 20, 2024

--

এই পোস্টটি লারাভেলের রাউটিং সিস্টেমের গভীরে ঢুকে যাবে। এখানে আমরা রাউট গ্রুপ, মিডলওয়্যার, রেট লিমিটিং, মডেল বাইন্ডিং এবং অন্যান্য উন্নত রাউটিং বৈশিষ্ট্য নিয়ে আলোচনা করবো। পদ্ধতিগুলি বুঝতে কোড উদাহরণগুলি সহজ করে দেওয়া হবে। ( Laravel: Routing Advanced )

রাউট গ্রুপ: এর মাধ্যমে আপনি রাউট পরিচালনা করতে পারবেন

তোমরা সবাই জানো যে, একটি উебসাইটে অনেকগুলি পৃষ্ঠা থাকে। এই পৃষ্ঠাগুলিকে আমরা ডোমেইন নেমের সাথে যুক্ত করি। যেমন example.com/about, example.com/contact ইত্যাদি। কিন্তু কিভাবে একাধিক রাউট একই মিডলওয়্যার ব্যবহার করে? রাউট গ্রুপের মাধ্যমে আমরা এটি করতে পারি।

Route::middleware('auth')->group(function () {
Route::get('/account', 'AccountController@index');
Route::get('/settings', 'SettingsController@index');
});

উপরের উদাহরণটি দেখুন। একই মিডলওয়্যার auth রাউটগুলিতে লাগানো হয়েছে। এভাবে আপনি রাউট গ্রুপ করতে পারেন।

নেস্টেড রাউট গ্রুপ

আপনি রাউট গ্রুপগুলিকেও নেস্ট করতে পারেন। যেমন:

Route::group(['prefix' => 'admin'], function () {
Route::get('/', 'AdminController@index');
    Route::group(['prefix' => 'users'], function () {
Route::get('/', 'UserController@index');
Route::get('/{user}', 'UserController@show');
});
});

উপরের উদাহরণে, /admin/users এবং /admin/users/{user} রাউটগুলি UserController-এ পয়েন্ট করবে।

মিডলওয়্যার: রিকোয়েস্ট ফিল্টার করুন

মিডলওয়্যারগুলি হল HTTP রিকোয়েস্টগুলিকে ফিল্টার করার একটি মাধ্যম। এগুলি রিকোয়েস্টগুলিকে পরীক্ষা করে এবং কিছু শর্ত পূরণ করলে বাকিটা প্রক্রিয়া করা হয়।

যেমন, auth মিডলওয়্যারটি রিকোয়েস্টটিকে পরীক্ষা করবে যে ব্যবহারকারী লগইন করেছেন কিনা। যদি না হয়, তাহলে তাকে লগইন পেজে নিয়ে যাওয়া হবে।

Route::middleware('auth')->group(function () {
// এইগুলি শুধুমাত্র অথেনটিকেটেড ব্যবহারকারীদের জন্য
});

আপনি নিজস্ব মিডলওয়্যারও তৈরি করতে পারেন। app/Http/Middleware ডিরেক্টরিটে যান এবং নতুন ফাইল তৈরি করুন।

রেট লিমিটিং: অ্যাপ্লিকেশন সুরক্ষা

রেট লিমিটিং হল একটি গুরুত্বপূর্ণ সুরক্ষা বৈশিষ্ট্য। এটি আপনার অ্যাপ্লিকেশনকে ব্রুট ফোর্স অ্যাটাক থেকে রক্ষা করে। এর মাধ্যমে আপনি একটি নির্দিষ্ট সময়ের মধ্যে রিকোয়েস্টগুলির সংখ্যা সীমাবদ্ধ করতে পারেন।

Route::middleware('throttle:60,1')->group(function () {
Route::get('/login', 'LoginController@showLoginForm');
Route::post('/login', 'LoginController@login');
});

উপরের উদাহরণটি লগইন রাউটগুলিতে রেট লিমিটিং চালু করেছে। এখানে, ব্যবহারকারীদেরকে 1 মিনিটের মধ্যে শুধুমাত্র 60টি রিকোয়েস্ট করার অনুমতি দেওয়া হবে।

মডেল বাইন্ডিং: রাউটে মডেল লিঙ্ক করা

মডেল বাইন্ডিং একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে রাউটগুলিতে সরাসরি এলোকুয়েন্ট মডেলগুলির সাথে কাজ করতে দেয়। এটি আপনাকে রাউট প্যারামিটারগুলিকে মডেল ইনস্ট্যান্সগুলিতে পরিণত করতে দেয়।

মডেল বাইন্ডিং কীভাবে কাজ করে?

যখন আপনি রাউটে একটি মডেল বাইন্ডিং লেআউট দিচ্ছেন, তখন লারাভেল সংশ্লিষ্ট মডেলটি ডাটাবেজ থেকে আনার চেষ্টা করবে। উদাহরণস্বরূপ:

Route::get('/posts/{post}', 'PostController@show');

এখানে {post} হল রাউট প্যারামিটার। লারাভেল Post মডেলটি খুঁজে বের করবে এবং রাউট প্যারামিটারের মান দিয়ে তা আনার চেষ্টা করবে। যদি সেটা না পায়, তবে 404 ভুল প্রদর্শিত হবে।

কাস্টম মডেল বাইন্ডিং কি?

আপনি ইচ্ছামত মডেল বাইন্ডিং পদ্ধতি কাস্টমাইজ করতে পারেন। যেমন, আপনি একটি স্লাগ ব্যবহার করে মডেল খুঁজতে পারেন।

// RouteServiceProvider.php
public function boot()
{
Route::bind('post', function ($slug) {
return Post::where('slug', $slug)->firstOrFail();
});
}

এখন {post} রাউট প্যারামিটার স্লাগের মান দিয়ে Post মডেলটি খুঁজবে।

ফর্ম মেথড স্পুফিং

হ্যাঁ, লারাভেলে একটু অদ্ভুত নাম দিয়েছে। কিন্তু এর উদ্দেশ্য বুঝতে হলে আমাদের HTML ফর্মগুলির কাজকর্ম বুঝতে হবে।

সাধারণভাবে, ব্রাউজারগুলি শুধুমাত্র GET এবং POST রিকোয়েস্ট পাঠাতে পারে। অন্যান্য HTTP ভার্বগুলি যেমন PUT, PATCH এবং DELETE পাঠানো যায় না। তবে লারাভেলের ফর্ম মেথড স্পুফিং বৈশিষ্ট্যটি আপনাকে এই সীমাবদ্ধতা অতিক্রম করতে দেয়।

<form action="/posts/1" method="POST">
@method('PUT')
<!-- ফর্মের অন্যান্য ফিল্ডগুলি -->
</form>

উপরের উদাহরণে, @method('PUT') লাইনটি লারাভেলকে জানাবে যে এটি একটি PUT রিকোয়েস্ট, যদিও আপনি POST মেথডটি ব্যবহার করছেন।

রিসোর্স রাউটিং

রিসোর্স রাউটিং হল লারাভেলের একটি অসাধারণ বৈশিষ্ট্য যা আপনাকে কম কোডের মাধ্যমে বেশি কাজ করতে দেয়। এটি আপনার কন্ট্রোলার মেথডগুলিকে সংজ্ঞায়িত রাউটগুলির সাথে মেপ করে।

Route::resource('posts', 'PostController');

এই একলাইন কোডটি নিম্নলিখিত রাউটগুলি তৈরি করবে:

/posts (index)
/posts/create (create)
/posts (store)
/posts/{post} (show)
/posts/{post}/edit (edit)
/posts/{post} (update)
/posts/{post} (destroy)

প্রতিটি রাউট কন্ট্রোলারের একটি নির্দিষ্ট মেথডে মেপ করা থাকবে। উদাহরণস্বরূপ, /posts রাউটটি PostController@index-এ যাবে।

অবশ্যই আপনি ইচ্ছামত রাউটগুলি আরও কাস্টমাইজ করতে পারেন ->only() বা ->except() মেথডগুলি ব্যবহার করে।

যদিও লারাভেলের রাউটিং সিস্টেমটি একটু জটিল, তবুও এটি অনেকগুলি সুবিধা প্রদান করে। আপনাকে শুধুমাত্র রাউটগুলি শেখার পরেই, লারাভেলের মডেল, ভিউ, কন্ট্রোলার এবং অন্যান্য বৈশিষ্ট্যগুলি সম্পর্কে জানতে হবে। তাহলেই আপনি একজন দক্ষ লারাভেল ডেভেলপার হিসেবে গড়ে উঠতে পারবেন। শুভকামনা!

--

--

Abu Sayed

Bangladeshi Full Stack Web Dev, Sys Admin & DevOps Engineer. Skills: Data analysis, SQL, Kubernetes. Python, PHP & Laravel. Me on: bd.linkedin.com/in/imabusayed