বাংলায় PHP LARAVEL FRAMEWORK পর্ব-৯: LARAVEL Requests Basics

Laravel Framework এ Requests কি?

http request response

http request response

যদিও ওয়েব দুনিয়ায় Request বিষয়টি ব্যাপক ভাবে ব্যবহৃত হয়, এক কথায় বলা যায় , ক্লায়েন্ট বা ইউজার পিসি থেকে সার্ভার পিসিতে যখন কোনো কিছু চাওয়া হয় , তখন আমরা তাকে বলি Requests. Larvel Framework এ সবধরণের Request গুলো Illuminate\Http\Request Class এর মাধ্যমে হ্যান্ডলিং করা হয়। এই পর্বে আমরা Laravel Framework এর Request গুলো receive করার পদ্ধতি গুলো দেখব।

পূর্ব প্রস্তুতি :

Laravel Framework এ Request এবং Response গুলো বুঝার জন্য আমরা আলাদা ভাবে একটা Route define করব এবং একটা Controller তৈরী করব, চলুন প্রথমে আমরা /getrequest url এবং requestController point করার জন্য routes/web.php তে আমাদের route defina করি :

Route::get('/getrequest', 'requestController@index');

এবার আমরা CLI তে আমাদের requestController টি তৈরী করব:

php artisan make:controller requestController

সব কিছু ঠিক থাকলে আপনার CLI নিচের মত ফলাফল দেখাবে :

Laravel Request Controller

Laravel Request Controller

এখন আপনার app/Http/Controllers ফোল্ডারে requestController.php file এ নিচের মত কোড গুলো দেখতে পাবেন।

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class requestController extends Controller
{
    //
}

এখন আমরা সব Request গুলো নিয়ে কাজ করার জন্য আমাদের CLI Controller এ আমাদের index Method এর Parameter এ Request Class এর Object Receive করব। আমাদের index মেথড সহ requestController টি দেখতে নিচের মত হবে:

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class requestController extends Controller
{
   public function index(Request $request){
    	
    }
}

Laravel Framework এ request নিয়ে কাজ করার জন্য আমাদের সব ধরণের প্রস্তুতি শেষ, এখন আমরা ধাপে ধাপে সব ধরণের request দেখবো।

Laravel Framework এ Controller থেকে কিভাবে input request গুলো receive করব?

Laravel Framework এ Controller থেকে request class এর all() অথবা input() method দিয়ে আপনি সব request একসাথে receive করতে পারেন। আবার $request object এর input() Method এর মাধ্যমে প্রত্যেকটি input আলাদা আলাদা receive করতে পারেন। আপনার requestController এর index মেথড এ নিচের মত কোডটি লিখুন :

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class requestController extends Controller
{
   public function index(Request $request){
   	echo "<pre>";
    	 print_r($request->all());
         print_r($request->input());
    	 echo $request->input('name');
    	echo "</pre>";
    }
}

যেহেতু আপনি আপনার route এ requestController এর index method এর জন্য path হিসেবে /getrequest define করেছেন , এখন আপনি আপনার URL এ নিচের মতো করে যেকোনো request পাঠালে index মেথড সব receive করবে:

http://localhost:8000/getrequest?name=Masud Alam&age=39

এখন আপনি আপনার ব্রাউজার এ নিচের মত ফলাফল দেখতে পাবেন:

Laravel request all input

Laravel request all input

তবে আপনি চাইলে input() মেথডে input name এর বিপরীতে একটা ডিফল্ট ভ্যালু সেট করতে পারেন , মেথডটির দ্বিতীয় প্যারামিটার এ। আর এতে যদি কোনো কারণে ইনপুট এর জন্য কোনো ভ্যালু না দেওয়া হয় , তাহলে এই ডিফল্ট value টি ই প্রদর্শন হবে। ঠিক নিচের মতো।

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class requestController extends Controller
{
   public function index(Request $request){
   	echo "<pre>";
    	 print_r($request->all());
    	 echo $request->input('name','Razib Hasan');
    	echo "</pre>";
    }
}

Laravel Framework এ সরাসরি route থেকে input request গুলো receive করা যাবে?

অবশ্যই করা যাবে, তবে তার জন্য আপনাকে Route এর মধ্যেও Request class টি ব্যবহার করতে হবে। আর বাকি সব আমাদের উপরের করা controller class এর কোডের মতোই। আপনার Route এ নিচের মতো করে কোড গুলো আপডেট করে নিন :

use Illuminate\Http\Request;
Route::get('/getrequest', function(Request $request){
    echo "<pre>";
         print_r($request->all());
         print_r($request->input());
         echo $request->input('name');
    echo "</pre>";
});

যেহেতু আমরা আমাদের route এ path হিসেবে /getrequest define করেছি , এখন আপনি আপনার URL এ নিচের মতো করে যেকোনো request পাঠালে index মেথড সব receive করবে:

http://localhost:8000/getrequest?name=Masud Alam&age=39

এখন আপনি আপনার ব্রাউজার এ নিচের মত ফলাফল দেখতে পাবেন:

Laravel request all input

Laravel request all input

তবে আপনি চাইলে input() মেথডে input name এর বিপরীতে একটা ডিফল্ট ভ্যালু সেট করতে পারেন , মেথডটির দ্বিতীয় প্যারামিটার এ। আর এতে যদি কোনো কারণে ইনপুট এর জন্য কোনো ভ্যালু না দেওয়া হয় , তাহলে এই ডিফল্ট value টি ই প্রদর্শন হবে। ঠিক নিচের মতো।

use Illuminate\Http\Request;
Route::get('/getrequest', function(Request $request){
    echo "<pre>";
         print_r($request->all());
         echo $request->input('name',"masud Alam");
    echo "</pre>";
});

Laravel Framework এ Controller থেকে কিভাবে url receive করব?

Laravel Framework এ Controller থেকে request class এর url() method দিয়ে আপনি শুধু url receive করতে পারেন। আবার $request object এর fullUrl() Method এর মাধ্যমে full URL receive করতে পারেন। আপনার requestController এর index মেথড এ নিচের মত কোডটি লিখুন :

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class requestController extends Controller
{
   public function index(Request $request){
   		echo "<pre>";
         echo $request->url();
         echo "\n";
         echo $request->fullUrl();
    	echo "</pre>";
    }
}

আপনার route এ নিম্নের মতো করে আপডেট করে নিন :

Route::get('/getrequest', 'requestController@index');

যেহেতু আপনি আপনার route এ requestController এর index method এর জন্য url হিসেবে /getrequest define করেছেন , এখন আপনি আপনার URL এ নিচের মতো করে যেকোনো request পাঠালে index মেথড URL দুই ভাবে অর্থাৎ শুধু URL এবং input সহ URL receive করবে :

http://localhost:8000/getrequest?name=Masud Alam&age=39

এখন আপনি আপনার ব্রাউজার এ নিচের মত ফলাফল দেখতে পাবেন:

Receive Path From Laravel Controller

Receive Path From Laravel Controller

Laravel Framework এ সরাসরি route থেকে URL receive করা যাবে?

অবশ্যই করা যাবে, তবে তার জন্য আপনাকে Route এর মধ্যেও Request class টি ব্যবহার করতে হবে। আর বাকি সব আমাদের উপরের করা controller class এর কোডের মতোই। আপনার Route এ নিচের মতো করে কোড গুলো আপডেট করে নিন :

use Illuminate\Http\Request;
Route::get('/getrequest', function(Request $request){
    echo "<pre>";
         print_r($request->url());
         echo $request->fullUrl();
    echo "</pre>";
});

যেহেতু আমরা আমাদের route এ path হিসেবে /getrequest define করেছি , এখন আপনি আপনার URL এ নিচের মতো করে যেকোনো request পাঠালে আপনার route নিজেও URL receive করতে পারবে:

http://localhost:8000/getrequest?name=Masud Alam&age=39

এখন আপনি আপনার ব্রাউজার এ নিচের মত ফলাফল দেখতে পাবেন:

Receive Path From Laravel Controller

Receive Path From Laravel Controller

Laravel Framework এ Controller থেকে কিভাবে path (i.e: /get/Masud/29) receive করব?

Laravel Framework এ Controller থেকে request class এর path() method দিয়ে আপনি path receive করতে পারেন। আপনার requestController এর index মেথড এ নিচের মত কোডটি লিখুন :

public function path(Request $request){
        echo "<pre>";
         echo $request->path();
        echo "</pre>";
    }

এবার web.php route এ নিম্নোক্ত route টি লিখে আসুন।

Route::get('/getpath/{name}/{age}', 'requestController@path');

যেহেতু আপনি আপনার route এ requestController এর path method এর জন্য path url হিসেবে /getpath/{name}/{age} define করেছেন , এখন আপনি আপনার URL এ নিচের মতো করে যেকোনো request পাঠালে path মেথড URL path receive করবে :

http://localhost:8000/getpath/Masud/36

এখন আপনি আপনার ব্রাউজার এ নিচের মত ফলাফল দেখতে পাবেন:

Laravel Path Request

Laravel Path Request

Laravel Framework এ Controller থেকে কিভাবে url এর segment গুলো receive করব?

Laravel Framework এ Controller থেকে request class এর segment() method দিয়ে আপনি url এর segment গুলো receive করতে পারেন। আপনার requestController এর index মেথড এ নিচের মত কোডটি লিখুন :

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class requestController extends Controller
{
   public function index(Request $request){
echo "Welcome ".$request->segment(2). " You're ".$request->segment(3). " years old";
    }
}

আপনার route এ নিম্নের মতো করে আপডেট করে নিন :

Route::get('/getrequest/{name}/{age}', 'requestController@index');

যেহেতু আপনি আপনার route এ requestController এর index method এর জন্য path হিসেবে /getrequest define করেছেন , এখন আপনি আপনার URL এ নিচের মতো করে যেকোনো request পাঠালে index মেথড এ URL segment গুলো প্রত্যেকটি আলাদা ভাবে receive করতে পারবেন

http://localhost:8000/getrequest/Masud Alam/35

এখন আপনি আপনার ব্রাউজার এ নিচের মত ফলাফল দেখতে পাবেন:

Receive URL Segment in Laravel

Receive URL Segment in Laravel

Laravel Framework এ সরাসরি route থেকে URL Segment receive করা যাবে?

অবশ্যই করা যাবে, তবে তার জন্য আপনাকে Route এর মধ্যেও Request class টি ব্যবহার করতে হবে। আর বাকি সব আমাদের উপরের করা controller class এর কোডের মতোই। আপনার Route এ নিচের মতো করে কোড গুলো আপডেট করে নিন :

use Illuminate\Http\Request;
Route::get('students/{name}/{age}', function(Request $request) {
        echo "Welcome ".$request->segment(2). " You're ".$request->segment(3). " years old";
}); 

যেহেতু আমরা আমাদের route এ path হিসেবে /students define করেছি , এখন আপনি আপনার URL এ নিচের মতো করে যেকোনো request পাঠালে আপনার route নিজেও URL Segment গুলো receive করতে পারবে:

http://localhost:8000/students/Masud Alam/39

এখন আপনি আপনার ব্রাউজার এ নিচের মত ফলাফল দেখতে পাবেন:

Receive URL Segment in Laravel

Receive URL Segment in Laravel

Laravel Framework এ form এর ডাটা কোন মেথডে পাঠানো হয়েছে তা কিভাবে বুজব?

Laravel Framework এ form এর ডাটা কোন মেথডে পাঠানো হয়েছে তা বুঝার জন্য আপনি method() এবং isMethod() এই দুটি মেথড ব্যবহার করতে পারেন। চলুন দেখা যাক:

প্রথমে form টি দেখানোর জন্য web.php file এ /myform নামে একটি route এবং ফর্ম এর ডাটা গুলো রিসিভ এবং প্রসেস করার জন্য /process নামে দুটি route define করে আসুন।

Route::get('/myform','homeController@form');
Route::post('/process','homeController@process');

এবার আপনার resources/views ফোল্ডারে myform.blade.php নামে একটা ফাইল তৈরি করুন এবং নিম্নোক্ত কোড গুলো যুক্ত করুন :

<form method="post" action="/process">
	Name: <input type="text" name="name">
	@csrf
	<input type="submit" name="submit" value="send">
</form>

এবার আপনার homeController এ form টি প্রদর্শনের জন্য form নামে একটা method এবং form এর data প্রসেস করার জন্য process নামে নিচের মতো দুটি মেথড তৈরি করুন :

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class homeController extends Controller
{
    public function form(){
        return view("myform");
    }

    public function process(Request $r){
    	echo  $r->method(),"<br>";
    	if ($r->isMethod('post')) {
    		echo "Yes, this form used post method";
    	}
    	else{
    		echo "No It's not Post Method";
    	}
    }
}

এখন যদি আপনি ফরমটি সাবমিট করেন , তাহলে নিচের মতো রেজাল্ট পাবেন:

Laravel Form Method Check

Laravel Form Method Check

Masud Alam
আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ৮ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। বিশেষ ভাবে বাংলাদেশের ১০০ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ৫২ জন ই আমার হাতে জেন্ড সার্টিফাইড হয়েছে। বর্তমানে TechBeeo Software Company তে সিইও হিসাবে আছি । পাশাপাশি w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -7 Engineering কোর্স করাই। আর w3programmers.com সাইট টি আমার।
One comment to “বাংলায় PHP LARAVEL FRAMEWORK পর্ব-৯: LARAVEL Requests Basics”

Leave a Reply