Larvel Framework এ Controller কি?
Controller নামটা দেখেই বুঝা যাচ্ছে Framework এর মধ্যে কোনো কিছু Control করা। হ্যাঁ আসলেই ঠিক, MVC Framework এর মধ্যে “C” অক্ষরটি Controller এর জন্য ব্যবহৃত হয়। Laravel অথবা যেকোনো MVC Framework এ Controller এর কাজ হচ্ছে View এবং Model কে Control বা নিয়ন্ত্রণ করা বা Model এবং View এর সাথে সমন্বয় সাধন করা। MVC ভিত্তিক যেকোনো software অথবা Web Application এর সমস্ত Business Logic রাখা হয় Controller এ । User কোন কিছুর জন্য request করলে সেটা প্রথমে যায় Controller এ । Request এর Response যদি Database এর কোন Data প্রয়োজন হয় তবে Controller তা Model এর মাধ্যমে এনে user এর প্রয়োজন অনুযায়ী Process করে View তে পাঠায়। এরপর User তার Request এর Response দেখতে পায়। যদিও আপনি এই কাজটি Laravel এর Controller ছাড়া route এ define করে view এবং Model এর মধ্যে যোগাযোগ করতে পারেন। আলাদাভাবে Controller ব্যাবহার করা হচ্ছে MVC Platform এর একটি আদর্শ পদ্ধতি। আর এতে সুবিধা হচ্ছে আপনার software অথবা Web Application এর সব Logic গুলো route এর মধ্যে একসাথে না রেখে আলাদা একটা পৃথক ফাইল অর্থাৎ একটি সিঙ্গেল Controller Class এর মধ্যে রাখা। আর যখন ওই Controller Class এর কোন Function অথবা কোন Method কে HTTP Request এর মাধ্যমে কল করার দরকার হবে তখন সেটা আপনাকে route এর মধ্যে define করে দিতে হবে। Laravel এ Controller ফাইল গুলা app/Http/Controllers এই ডিরেক্টরিতে রাখতে হয়।
Laravel Framework এ কিভাবে Controller তৈরী করা হয় ?
Laravel framework এ Laravel এর নিজস্ব Abstract class Controller থেকে extends করার মাধ্যমে আপনি নিজের জন্য একটা controller তৈরী করে নিতে পারেন। তবে তাতে অনেক সময় namespace decleration সহ অন্যান্য কিছু সমস্যা হতে পারে, তারচেয়ে ভালো হয়, আপনি Laravel এর নিজস্ব Artisan CLI (Command Line Interface ) ব্যবহার করে কাজটি করলে। এতে আপনি শুধু Controller টির নামটি বলবেন, বাকি সবকাজ laravel নিজেই করে নিবে। CLI (Command Line Interface) দিয়ে একটা Controller Class তৈরী করতে হলে আপনাকে CLI দিয়ে প্রথমে আপনাকে আপনার Laravel এর Project directory তে নেভিগেট করতে হবে। তাহলে চলুন CLI (Command Line Interface)এ নিচের কোডটি দিয়ে একটা Controller Class তৈরী করি:
php artisan make:controller homeController
এখন আপনি app\Http\Controllers ডিরেক্টরিতে homeController.php নামে একটি সম্পূর্ণ নতুন Controller পাবেন। যেটাতে ঠিক নিচের মতো কোড দেখতে পাবেন :
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class homeController extends Controller
{
//
}
এবার আপনি আপনার নিজের controller এ যেকোনো নতুন নতুন Method তৈরী করতে পারেন, এবং সেটাকে Route থেকে call করতে পারেন। ধরুন আমরা একটা index নামে একটি method তৈরী করব। এবং সেখানে শুধু “hello world” লেখাটি show করব। নিচের কোডটি দেখুন :
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class homeController extends Controller
{
public function index(){
echo "Hello World";
}
}
route এর মাধ্যমে controller class এর যেকোনো মেথড show করা
route এর মাধ্যমে controller class এর যেকোনো Method কে ব্রাউজার এ দেখাতে হলে আপনাকে route class এর get Method এ প্রথম Parameter হিসেবে url বা page এর নাম দিতে হবে, এবং দ্বিতীয় parameter এ controllerName@methodName দিতে হবে। নিচের কোডটি দেখুন :
Route::get('/home', 'homeController@index');
এখন আপনি আপনার ব্রাউজার এর Address bar এ “http://localhost:8000/home” লিখে hit করুন, তাহলে আপনার route ঠিক নিম্নের screenshot গুলোর মতো রেজাল্ট দেখাবে:
show controller output using laravel route
URL এ Route এর মাধ্যমে Controller এর নির্দিষ্ট Method এ Parameter পাঠানো
URL এ Route এর মাধ্যমে Controller এর নির্দিষ্ট Method এ Parameter পাঠাতে হলে , আপনাকে দুটি কাজ করতে হবে, প্রথমত : আপনাকে route এ url এর পর Parameter দিতে হবে, ঠিক নিচের মতো :
Route::get('/home/{name}/{age}', 'homeController@index');
নোট: তবে আপনি Parameter দুটিকে Optional করে দিতে চাইলে Parameter দুটির প্রত্যেকটির পরে একটা “?” দিয়ে দিতে হবে। ঠিক নিচের মতো :
Route::get('/home/{name?}/{age?}', 'homeController@index');
এবার আপনি আপনার controller এর method এ Parameter দুটি দিয়ে দিতে হবে, নিচের কোডটি দেখুন :
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class homeController extends Controller
{
public function index($name,$age){
echo "Welcome $name You're $age years old";
}
}
এখন আপনি আপনার ব্রাউজার এর Address bar এ “http://localhost:8000/home” লিখে hit করুন, তাহলে আপনার route ঠিক নিম্নের screenshot গুলোর মতো রেজাল্ট দেখাবে:
URL এ Controller এর নির্দিষ্ট Method এ কোনো নির্দিষ্ট Parameter ছাড়া যেকোনো Request Receive করা
URL এ Controller এর নির্দিষ্ট Method এ কোনো নির্দিষ্ট Parameter ছাড়া যেকোনো Request Receive করার জন্য প্রথমে আমাদেরকে একটা route define করতে হবে। ঠিক নিচের মতো:
Route::get('/geturldata', 'homeController@getUrlData');
এবার আপনার homeController এ নিচের মত একটা method তৈরী করে ফেলুন :
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class homeController extends Controller
{
public function getUrlData(Request $request){
echo "Name: ".$request->name." <br> Age: ".$request->age;
}
}
এখন আপনি আপনার URL এ নিচের লিংকটি লিখে hit করুন: