คำอธิบาย

รับอ็อบเจ็กต์ขอคำขอ

webman จะแทรขอคำขอโดยอัตโนมัติไปยังพารามิเตอร์แรกของเมธอดแอ็กชัน เช่น

ตัวอย่าง

<?php
namespace app\controller;

use support\Request;

class UserController
{
    public function hello(Request $request)
    {
        $default_name = 'webman';
        // รับพารามิเตอร์ name จากคำขอ get และถ้าไม่มีการระบุพารามิเตอร์ 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');

รับพารามิเตอร์ post ต้นฉบับ

$post = $request->rawBody();

ฟังก์ชันนี้เหมือนกับการกระทำ file_get_contents("php://input"); ใน php-fpm สำหรับการรับข้อมูลคำขอ post รูปแบบอีกแบบที่ไม่ใช่ application/x-www-form-urlencoded มีประโยชน์มาก

รับเฮดเดอร์

รับอาร์เรย์ทั้งหมดของเฮดเดอร์

$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']);

รับไฟล์ที่อัพโหลด

รับอาร์เรย์ทั้งหมดของไฟล์ที่อัพโหลด

$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()); // ได้ชนิด mine ของไฟล์ที่อัพโหลด เช่น '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 เป็น 10 M โดยปริยาย สามารถเปลี่ยนแปลงค่าเริ่มต้นได้ในไฟล์ 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']);
    }
}

รับ host

รับข้อมูล host ของการร้องขอ

$request->host();

หากที่ร้องขอมาไม่ใช่พอร์ตมาตรฐาน 80 หรือ 443 ข้อมูล host อาจจะมีพอร์ตเช่น example.com:8080 ถ้าไม่ต้องการรวมพอร์ต สามารถใส่พารามิเตอร์ตัวแรกเป็น true

$request->host(true);

รับวิธีการร้องขอ

 $request->method();

คืนค่าอาจเป็น GET, POST, PUT, DELETE, OPTIONS, หรือ HEAD หนึ่งวิธีการ

รับ URI ของการร้องขอ

$request->uri();

คืนค่า URI ของการร้องขอ รวมถึง path และส่วน queryString

รับเส้นทางของการร้องขอ

$request->path();

คืนเส้นทาง (path) ของการร้องขอ

รับ queryString ของการร้องขอ

$request->queryString();

คืนค่า queryString ของการร้องขอ

รับ URL ของการร้องขอ

เมธอด url() คืนค่า URL โดยไม่รวมพารามิเตอร์ Query

$request->url();

คืนค่าเช่น //www.workerman.net/workerman-chat

เมธอด fullUrl() คืนค่า URL รวมพารามิเตอร์ Query

$request->fullUrl();

คืนค่าเช่น //www.workerman.net/workerman-chat?type=download

โปรดทราบ
url() และ fullUrl() ไม่คืนค่าส่วนโปรโตคอล (protocol) (ไม่คืนค่า http หรือ https) เนื่องจากในเบราว์เซอร์เมื่อใช้ที่อยู่ที่ขึ้นต้นด้วย // จะตรวจจับโปรโตคอลของเว็บไซต์ปัจจุบันโดยอัตโนมัติ และทำการส่งคำร้องขอโดยใช้ http หรือ https

หากคุณใช้ nginx proxy โปรดเพิ่ม proxy_set_header X-Forwarded-Proto $scheme; ลงในการกำหนด nginx ดูเพิ่มเติมที่ nginx proxy นี้ ทำให้สามารถทำการใช้ $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 ของกลุ่มผู้ใช้งาน (Client)

$request->getRemoteIp();

รับพอร์ตของกลุ่มผู้ใช้งาน (Client)

$request->getRemotePort();

รับ IP ของกลุ่มผู้ใช้งาน (Client) จริง

$request->getRealIp($safe_mode=true);

เมื่อโปรเจกต์ใช้พร็อกซี(เช่น nginx) การใช้ $request->getRemoteIp() มักจะได้รับ IP ของเซิร์ฟเวอร์พร็อกซี (เช่น 127.0.0.1 192.168.x.x) แทน IP จริงของกลุ่มผู้ใช้งาน (Client) ในกรณีนี้ คุณสามารถลองใช้ $request->getRealIp() เพื่อรับ IP จริงของกลุ่มผู้ใช้งาน (Client)

$request->getRealIp() จะพยายามจะรับ IP จริงจากเชดอู่การร้องขอ HTTP ของ x-real-ip, x-forwarded-for, client-ip, x-client-ip, via

เนื่องจากเฮดเดร์ HTTP สามารถปลอมแปลงได้ง่าย ดังนั้นวิธีนี้ในการรับ IP จริงของกลุ่มผู้ใช้งานจึงไม่สามารถเชื่อถือได้ โดยเฉพาะถ้า $safe_mode เป็นเท็จ วิธีที่ที่ที่เป็นการนำเข้า IP ผู้ใช้จริงโดยอาจหลือกคือทราย IP ของเซิร์ฟเวอร์พร็อกซีที่มีความปลอดภัยทราบอันดับและมุ่นนร้ายโดยรู้จัก [การใช้งาน $request->getRemoteIp()และอาจารย์ความปลอดภัย) หาก IP ที่คืนใช้งาน $request->getRemoteIp() ยืนยันว่าเป็นเซิร์ฟเวอร์พร็อกซีที่ทราบอันดับและมุ่นนร้ายหลังจากนั้นโดยใช้$request->header('โครงข่ากราง IP ที่จะนำเข้า') รับ IP จริง

รับ IP ของเซิร์ฟเวอร์

$request->getLocalIp();

รับพอร์ตของเซิร์ฟเวอร์

$request->getLocalPort();

ตรวจสอบว่าเป็นการร้องขอแบบ AJAX หรือไม่

$request->isAjax();

ตรวจสอบว่าเป็นการร้องขอแบบ PJAX หรือไม่

$request->isPjax();

ตรวจสอบว่าการร้องขอคาดหวังการคืนค่าในรูปแบบ JSON หรือไม่

$request->expectsJson();

ตรวจสอบว่าไคลเอ็นต์ได้รับการคืนค่าเป็น JSON หรือไม่

$request->acceptJson();

รับชื่อปลั๊กอินของการร้องขอ

การร้องขอที่ไม่ใช่แบบปลั๊กอินจะคืนค่าสตริงว่าง

$request->plugin;

คุณสมบูรณ์จำเป็นต้องใช้ ว็บแมน>=1.4.0

รับชื่อแอพพลิเคชันของการร้องขอ

เมื่อมีแอพพลิเคชันเดียวเสมอคืนค่าสตริงว่าง
เมื่อมี แอพพลิเคชันเยอะ คืนกลับชื่อของแอพพลิเคชัน

$request->app;

เนื่องจากฟังก์ชันปิดไม่ได้อยู่ภายใต้แอพพลิเคชันใด ๆ การร้องขอจากเส้นทางปิดในฟังก์ชันปิดคืนค่าสตริงว่าง
ดูเพิ่มเติมที่ เส้นทาง

รับชื่อคลาสควบคิลของการร้องขอ

รับชื่อคลาสควบคิลที่สอดคลีกัน

$request->controller;

คืนค่าเช่น app\controller\IndexController

เนื่องจากฟังก์ชันปิดไม่ได้อยู่ภายใต้คลาสควบคิลใด ๆ การร้องขอจากเส้นทางปิดในคลาสควบคิลคืนค่าสตริงว่าง
ดูเพิ่มเติมที่ เส้นทาง

รับชื่อเมธอดที่าร้องขอ

รับชื่อเมธอดที่สอดคลีกันของควบคิล

$request->action;

คืนค่าเช่น index

เนื่องจากฟังก์ชันปิดไม่ได้อยู่ภายใต้คลาสควบคิลใด ๆ การร้องขอจากเส้นทางปิดในคลาสควบคิลคืนค่าสตริงว่าง
ดูเพิ่มเติมที่ เส้นทาง