विवरण
अनुरोध ऑब्जेक्ट प्राप्त करें
webman स्वचालित रूप से अनुरोध ऑब्जेक्ट को action विधि के पहले पैरामीटर में इंजेक्ट करेगा, उदाहरण के लिए:
उदाहरण
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
$default_name = 'webman';
// get अनुरोध से name पैरामीटर प्राप्त करें, यदि name पैरामीटर नहीं दिया गया है तो $default_name लौटाएं
$name = $request->get('name', $default_name);
// ब्राउज़र में स्ट्रिंग लौटाएं
return response('hello ' . $name);
}
}
$request
ऑब्जेक्ट के माध्यम से हम अनुरोध से संबंधित किसी भी डेटा को प्राप्त कर सकते हैं।
कभी-कभी हम अन्य कक्षाओं में वर्तमान अनुरोध का $request
ऑब्जेक्ट प्राप्त करना चाहते हैं, इस स्थिति में हम केवल सहायक फ़ंक्शन request()
का उपयोग कर सकते हैं।
GET अनुरोध पैरामीटर प्राप्त करें
पूरे GET ऐरे को प्राप्त करें
$request->get();
यदि अनुरोध में कोई GET पैरामीटर नहीं है तो यह एक खाली ऐरे लौटाएगा।
GET ऐरे के किसी एक मान को प्राप्त करें
$request->get('name');
यदि GET ऐरे में यह मान मौजूद नहीं है तो यह null लौटाएगा।
आप GET विधि के दूसरे पैरामीटर में एक डिफ़ॉल्ट मान भी पास कर सकते हैं, यदि GET ऐरे में संबंधित मान नहीं मिला तो यह डिफ़ॉल्ट मान लौटाएगा। उदाहरण के लिए:
$request->get('name', 'tom');
POST अनुरोध पैरामीटर प्राप्त करें
पूरे POST ऐरे को प्राप्त करें
$request->post();
यदि अनुरोध में कोई POST पैरामीटर नहीं है तो यह एक खाली ऐरे लौटाएगा।
POST ऐरे के किसी एक मान को प्राप्त करें
$request->post('name');
यदि POST ऐरे में यह मान मौजूद नहीं है तो यह null लौटाएगा।
GET विधि की तरह, आप POST विधि के दूसरे पैरामीटर में एक डिफ़ॉल्ट मान भी प्रदान कर सकते हैं, यदि POST ऐरे में संबंधित मान नहीं मिला तो यह डिफ़ॉल्ट मान लौटाएगा। उदाहरण के लिए:
$request->post('name', 'tom');
सहायक फ़ंक्शन input()
$request->input()
फ़ंक्शन के समान, सभी पैरामीटर प्राप्त कर सकता है, input() सहायक फ़ंक्शन में कुल दो पैरामीटर होते हैं:
- name: प्राप्त किए जाने वाले पैरामीटर का नाम (यदि खाली है, तो सभी पैरामीटर के ऐरे को प्राप्त किया जा सकता है)
- default: डिफ़ॉल्ट मान (पहले पैरामीटर से प्राप्त करने में असफल होने पर, इस पैरामीटर का मान उपयोग किया जाएगा)
उदाहरण
// पैरामीटर name प्राप्त करें
$name = input('name');
// पैरामीटर name प्राप्त करें, यदि नहीं है तो डिफ़ॉल्ट मान का उपयोग करें
$name = input('name','张三');
// सभी पैरामीटर प्राप्त करें
$all_params = input();
मूल अनुरोध POST पैकेट प्राप्त करें
$post = $request->rawBody();
यह कार्यक्षमता php-fpm
में file_get_contents("php://input");
ऑपरेशन के समान है। यह HTTP मूल अनुरोध पैकेट प्राप्त करने के लिए उपयोगी है। यह application/x-www-form-urlencoded
फ़ॉर्मेट के POST अनुरोध डेटा को प्राप्त करने में बहुत सहायक है।
हेडर प्राप्त करें
पूरे हेडर ऐरे को प्राप्त करें
$request->header();
यदि अनुरोध में कोई हेडर पैरामीटर नहीं है तो यह एक खाली ऐरे लौटाएगा। सभी कुंजी छोटे अक्षरों में होंगी।
हेडर ऐरे के किसी एक मान को प्राप्त करें
$request->header('host');
यदि हेडर ऐरे में यह मान मौजूद नहीं है तो यह null लौटाएगा। सभी कुंजी छोटे अक्षरों में होंगी।
GET विधि की तरह, आप हेडर विधि के दूसरे पैरामीटर में एक डिफ़ॉल्ट मान भी पास कर सकते हैं, यदि हेडर ऐरे में संबंधित मान नहीं मिला तो यह डिफ़ॉल्ट मान लौटाएगा। उदाहरण के लिए:
$request->header('host', 'localhost');
कुकी प्राप्त करें
पूरे कुकी ऐरे को प्राप्त करें
$request->cookie();
यदि अनुरोध में कोई कुकी पैरामीटर नहीं है तो यह एक खाली ऐरे लौटाएगा।
कुकी ऐरे के किसी एक मान को प्राप्त करें
$request->cookie('name');
यदि कुकी ऐरे में यह मान मौजूद नहीं है तो यह null लौटाएगा।
GET विधि की तरह, आप कुकी विधि के दूसरे पैरामीटर में एक डिफ़ॉल्ट मान भी पास कर सकते हैं, यदि कुकी ऐरे में संबंधित मान नहीं मिला तो यह डिफ़ॉल्ट मान लौटाएगा। उदाहरण के लिए:
$request->cookie('name', 'tom');
सभी इनपुट प्राप्त करें
post
और get
का संग्रह शामिल करता है।
$request->all();
निर्दिष्ट इनपुट मान प्राप्त करें
post
और get
के संग्रह से किसी एक मान को प्राप्त करें।
$request->input('name', $default_value);
आंशिक इनपुट डेटा प्राप्त करें
post
और get
के संग्रह से कुछ डेटा प्राप्त करें।
// username और password组成 के ऐरे को प्राप्त करें, यदि संबंधित कुंजी नहीं मिली तो उसे अनदेखा करें
$only = $request->only(['username', 'password']);
// avatar और age को छोड़कर सभी इनपुट प्राप्त करें
$except = $request->except(['avatar', 'age']);
नियंत्रक पैरामीटर के माध्यम से इनपुट प्राप्त करें
<?php
namespace app\controller;
use support\Response;
class UserController
{
public function create(string $name, int $age = 18): Response
{
return json(['name' => $name, 'age' => $age]);
}
}
कोड लॉजिक इस तरह है:
<?php
namespace app\controller;
use support\Request;
use support\Response;
class UserController
{
public function create(Request $request): Response
{
$name = $request->input('name');
$age = (int)$request->input('age', 18);
return json(['name' => $name, 'age' => $age]);
}
}
अधिक जानकारी के लिए देखें नियंत्रक पैरामीटर बाइंडिंग
अपलोड फ़ाइल प्राप्त करें
सूचना
फ़ाइल अपलोड करने के लिएmultipart/form-data
फ़ॉर्मेट का उपयोग करना आवश्यक है।
पूरे अपलोड फ़ाइल ऐरे को प्राप्त करें
$request->file();
फॉर्म इस तरह है:
<form method="post" action="http://127.0.0.1:8787/upload/files" enctype="multipart/form-data" />
<input name="file1" multiple="multiple" type="file">
<input name="file2" multiple="multiple" type="file">
<input type="submit">
</form>
$request->file()
द्वारा लौटाए गए फ़ॉर्मेट इस तरह है:
array (
'file1' => object(webman\Http\UploadFile),
'file2' => object(webman\Http\UploadFile)
)
यह webman\Http\UploadFile
के उदाहरणों का एक ऐरे है। webman\Http\UploadFile
कक्षा PHP के अंतर्निर्मित SplFileInfo
वर्ग से विरासत में मिली है, और यह कुछ सहायक विधियाँ प्रदान करती है।
<?php
namespace app\controller;
use support\Request;
class UploadController
{
public function files(Request $request)
{
foreach ($request->file() as $key => $spl_file) {
var_export($spl_file->isValid()); // फ़ाइल मान्य है या नहीं, उदाहरण के लिए true|false
var_export($spl_file->getUploadExtension()); // अपलोड की गई फ़ाइल का एक्सटेंशन, उदाहरण के लिए 'jpg'
var_export($spl_file->getUploadMimeType()); // अपलोड की गई फ़ाइल का MIME प्रकार, उदाहरण के लिए 'image/jpeg'
var_export($spl_file->getUploadErrorCode()); // अपलोड त्रुटि कोड प्राप्त करें, उदाहरण के लिए UPLOAD_ERR_NO_TMP_DIR UPLOAD_ERR_NO_FILE UPLOAD_ERR_CANT_WRITE
var_export($spl_file->getUploadName()); // अपलोड की गई फ़ाइल का नाम, उदाहरण के लिए 'my-test.jpg'
var_export($spl_file->getSize()); // फ़ाइल का आकार प्राप्त करें, उदाहरण के लिए 13364, इकाई बाइट
var_export($spl_file->getPath()); // अपलोड किए गए निर्देशिका को प्राप्त करें, उदाहरण के लिए '/tmp'
var_export($spl_file->getRealPath()); // अस्थायी फ़ाइल पथ प्राप्त करें, उदाहरण के लिए `/tmp/workerman.upload.SRliMu`
}
return response('ok');
}
}
ध्यान दें:
- फ़ाइल अपलोड होने के बाद अस्थायी फ़ाइल के रूप में नामित की जाएगी, जैसे
/tmp/workerman.upload.SRliMu
- फ़ाइल अपलोड का आकार defaultMaxPackageSize द्वारा सीमित है, डिफ़ॉल्ट 10M है, इसे
config/server.php
फ़ाइल मेंmax_package_size
को संशोधित करके बदला जा सकता है। - अनुरोध समाप्त होने के बाद अस्थायी फ़ाइल को स्वचालित रूप से हटा दिया जाएगा।
- यदि अनुरोध में कोई अपलोड फ़ाइल नहीं है तो
$request->file()
एक खाली ऐरे लौटाएगा। - अपलोड की गई फ़ाइलों के लिए
move_uploaded_file()
विधि का समर्थन नहीं है, कृपया$file->move()
विधि का उपयोग करें, नीचे के उदाहरण देखें।
विशेष अपलोड फ़ाइल प्राप्त करें
$request->file('avatar');
यदि फ़ाइल मौजूद है तो संबंधित फ़ाइल का webman\Http\UploadFile
उदाहरण लौटाएगा, अन्यथा null लौटाएगा।
उदाहरण
<?php
namespace app\controller;
use support\Request;
class UploadController
{
public function file(Request $request)
{
$file = $request->file('avatar');
if ($file && $file->isValid()) {
$file->move(public_path().'/files/myfile.'.$file->getUploadExtension());
return json(['code' => 0, 'msg' => 'upload success']);
}
return json(['code' => 1, 'msg' => 'file not found']);
}
}
होस्ट प्राप्त करें
अनुरोध के होस्ट जानकारी को प्राप्त करें।
$request->host();
यदि अनुरोध का पता मानक 80 या 443 पोर्ट नहीं है, तो होस्ट जानकारी पोर्ट के साथ हो सकती है, जैसे example.com:8080
। यदि पोर्ट की आवश्यकता नहीं है, तो पहले पैरामीटर में true
पास किया जा सकता है।
$request->host(true);
अनुरोध विधि प्राप्त करें
$request->method();
रिटर्न वैल्यू GET
, POST
, PUT
, DELETE
, OPTIONS
, HEAD
में से एक हो सकती है।
अनुरोध URI प्राप्त करें
$request->uri();
यह अनुरोध का URI लौटाता है, जिसमें path और queryString भाग शामिल हैं।
अनुरोध पथ प्राप्त करें
$request->path();
यह अनुरोध के पथ भाग को लौटाता है।
अनुरोध queryString प्राप्त करें
$request->queryString();
यह अनुरोध के queryString भाग को लौटाता है।
अनुरोध URL प्राप्त करें
url()
विधि बिना Query
पैरामीटर के URL लौटाती है।
$request->url();
यह लौटाता है जैसे //www.workerman.net/workerman-chat
fullUrl()
विधि Query
पैरामीटर के साथ URL लौटाती है।
$request->fullUrl();
यह लौटाता है जैसे //www.workerman.net/workerman-chat?type=download
ध्यान दें
url()
औरfullUrl()
प्रोटोकॉल भाग लौटाते नहीं हैं (HTTP या HTTPS नहीं लौटाते)।
क्योंकि ब्राउज़र में//example.com
की तरह के पते स्वचालित रूप से वर्तमान साइट के प्रोटोकॉल को पहचानते हैं, HTTP या HTTPS से अनुरोध शुरू करते हैं।
यदि आपने nginx प्रॉक्सी का उपयोग किया है, तो कृपया proxy_set_header X-Forwarded-Proto $scheme;
को nginx कॉन्फ़िगरेशन में जोड़ें, nginx प्रॉक्सी संदर्भ में,
इस तरह आप $request->header('x-forwarded-proto');
का उपयोग करके HTTP या HTTPS का निर्धारण कर सकते हैं, उदाहरण के लिए:
echo $request->header('x-forwarded-proto'); // HTTP या HTTPS आउटपुट
अनुरोध HTTP संस्करण प्राप्त करें
$request->protocolVersion();
यह 1.1
या 1.0
स्ट्रिंग लौटाता है।
अनुरोध sessionId प्राप्त करें
$request->sessionId();
यह एक स्ट्रिंग लौटाता है, जिसमें वर्णमाला और अंक होते हैं।
अनुरोध क्लाइंट IP प्राप्त करें
$request->getRemoteIp();
अनुरोध क्लाइंट पोर्ट प्राप्त करें
$request->getRemotePort();
अनुरोध क्लाइंट असली IP प्राप्त करें
$request->getRealIp($safe_mode=true);
जब प्रोजेक्ट प्रॉक्सी (जैसे कि nginx) का उपयोग करता है, तो $request->getRemoteIp()
द्वारा प्राप्त IP आम तौर पर प्रॉक्सी सर्वर IP (जैसे 127.0.0.1
192.168.x.x
) होती है, न कि क्लाइंट का असली IP। इस स्थिति में आप $request->getRealIp()
का उपयोग करके क्लाइंट का असली IP प्राप्त करने की कोशिश कर सकते हैं।
$request->getRealIp()
HTTP हेडर के x-forwarded-for
、x-real-ip
、client-ip
、x-client-ip
、via
फ़ील्ड से असली IP प्राप्त करने का प्रयास करेगा।
HTTP हेडर को फर्जी बनाना आसान होता है, इसलिए इस विधि से प्राप्त क्लाइंट IP हमेशा 100% विश्वसनीय नहीं होता, विशेषकर जब
$safe_mode
false हो। प्रॉक्सी के माध्यम से क्लाइंट का असली IP प्राप्त करने के लिए अधिक विश्वसनीय विधि है, ज्ञात सुरक्षित प्रॉक्सी सर्वर IP होना और यह जानना कि असली IP किस HTTP हेडर में है, यदि$request->getRemoteIp()
द्वारा लौटाया गया IP ज्ञात सुरक्षित प्रॉक्सी सर्वर है, तो आप$request->header('असली IP वाला HTTP हेडर')
से असली IP प्राप्त कर सकते हैं।
सर्वर IP प्राप्त करें
$request->getLocalIp();
सर्वर पोर्ट प्राप्त करें
$request->getLocalPort();
AJAX अनुरोध है या नहीं पता करें
$request->isAjax();
PJAX अनुरोध है या नहीं पता करें
$request->isPjax();
JSON प्रतिक्रिया की अपेक्षा है या नहीं पता करें
$request->expectsJson();
क्लाइंट JSON प्रतिक्रिया स्वीकार करता है या नहीं पता करें
$request->acceptJson();
अनुरोध के प्लगइन नाम प्राप्त करें
गैर-प्लगइन अनुरोध पर खाली स्ट्रिंग ''
लौटाता है।
$request->plugin;
अनुरोध के एप्लिकेशन नाम प्राप्त करें
सिंगल एप्लिकेशन पर हमेशा खाली स्ट्रिंग ''
लौटाता है, कई एप्लिकेशन पर एप्लिकेशन नाम लौटाता है।
$request->app;
चूंकि क्लोजर फ़ंक्शन किसी एप्लिकेशन से संबंधित नहीं होते हैं, इसलिए क्लोजर रूट से आने वाला अनुरोध
$request->app
हमेशा खाली स्ट्रिंग''
लौटाता है।
क्लोजर रूट देखें रूटिंग
अनुरोध के नियंत्रक कक्षा नाम प्राप्त करें
संबंधित नियंत्रक का कक्षा नाम प्राप्त करें
$request->controller;
यह लौटाता है जैसे app\controller\IndexController
चूंकि क्लोजर फ़ंक्शन किसी नियंत्रक से संबंधित नहीं होते हैं, इसलिए क्लोजर रूट से आने वाला अनुरोध
$request->controller
हमेशा खाली स्ट्रिंग''
लौटाता है।
क्लोजर रूट देखें रूटिंग
अनुरोध के विधि नाम प्राप्त करें
संबंधित नियंत्रक विधि का नाम प्राप्त करें
$request->action;
यह लौटाता है जैसे index
चूंकि क्लोजर फ़ंक्शन किसी नियंत्रक से संबंधित नहीं होते हैं, इसलिए क्लोजर रूट से आने वाला अनुरोध
$request->action
हमेशा खाली स्ट्रिंग''
लौटाता है।
क्लोजर रूट देखें रूटिंग
पैरामीटर फिर से लिखें
कभी-कभी हम अनुरोध के पैरामीटर को फिर से लिखना चाहते हैं, उदाहरण के लिए अनुरोध को फ़िल्टर करना और फिर अनुरोध ऑब्जेक्ट को नए मान असाइन करना चाहते हैं, इस स्थिति में हम setGet()
setPost()
setHeader()
विधियों का उपयोग कर सकते हैं।
GET पैरामीटर पुनः लिखें
$request->get(); // मान लें कि यह ['name' => 'tom', 'age' => 18] प्राप्त करता है
$request->setGet(['name' => 'tom']);
$request->get(); // अंततः ['name' => 'tom'] प्राप्त होता है
ध्यान दें
उदाहरण में दिखाए अनुसार,setGet()
सभी GET पैरामीटर को फिर से लिखता है,setPost()
setHeader()
का भी यही व्यवहार है।
POST पैरामीटर पुनः लिखें
$post = $request->post();
foreach ($post as $key => $value) {
$post[$key] = htmlspecialchars($value);
}
$request->setPost($post);
$request->post(); // फ़िल्टर किए गए POST पैरामीटर प्राप्त करें
हेडर पैरामीटर पुनः लिखें
$request->setHeader(['host' => 'example.com']);
$request->header('host'); // आउटपुट example.com