Laravel Framework এ Requests কি?
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
এখন আপনার 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 করবে:
তবে আপনি চাইলে 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 করবে:
তবে আপনি চাইলে input() মেথডে input name এর বিপরীতে একটা ডিফল্ট ভ্যালু সেট করতে পারেন , মেথডটির দ্বিতীয় প্যারামিটার এ। আর এতে যদি কোনো কারণে ইনপুট এর জন্য কোনো ভ্যালু না দেওয়া হয় , তাহলে এই ডিফল্ট value টি ই প্রদর্শন হবে। ঠিক নিচের মতো।
use Illuminate\Http\Request;
Route::get('/getrequest', function(Request $request){
echo "<pre>";
print_r($request->all());
echo $request->input('name',"Sahab Uddin");
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 এ নিম্নের মতো করে আপডেট করে নিন :
1 Route::get('/getrequest', 'requestController@index');
যেহেতু আপনি আপনার route এ requestController এর index method এর জন্য url হিসেবে /getrequest define করেছেন , এখন আপনি আপনার URL এ নিচের মতো করে যেকোনো request পাঠালে index মেথড URL দুই ভাবে অর্থাৎ শুধু URL এবং input সহ URL receive করবে :
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 করতে পারবে:
Laravel Framework এ Controller থেকে কিভাবেpath (i.e: /get/Sahab/25) 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 করবে :
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 করতে পারবেন
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 করতে পারবে:
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";
}
}
}