国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

說明

獲得請求對象

webman會自動將請求對象注入到action方法第一個參數(shù)中,例如

例子

<?php
namespace app\controller;

use support\Request;

class UserController
{
    public function hello(Request $request)
    {
        $default_name = 'webman';
        // 從get請求里獲得name參數(shù),如果沒有傳遞name參數(shù)則返回$default_name
        $name = $request->get('name', $default_name);
        // 向瀏覽器返回字符串
        return response('hello ' . $name);
    }
}

通過$request對象我們能獲取到請求相關(guān)的任何數(shù)據(jù)。

有時候我們想在其它類中獲取當(dāng)前請求的$request對象,這時候我們只要使用助手函數(shù)request()即可;

獲得請求參數(shù)get

獲取整個get數(shù)組

$request->get();

如果請求沒有g(shù)et參數(shù)則返回一個空的數(shù)組。

獲取get數(shù)組的某一個值

$request->get('name');

如果get數(shù)組中不包含這個值則返回null。

你也可以給get方法第二個參數(shù)傳遞一個默認(rèn)值,如果get數(shù)組中沒找到對應(yīng)值則返回默認(rèn)值。例如:

$request->get('name', 'tom');

獲得請求參數(shù)post

獲取整個post數(shù)組

$request->post();

如果請求沒有post參數(shù)則返回一個空的數(shù)組。

獲取post數(shù)組的某一個值

$request->post('name');

如果post數(shù)組中不包含這個值則返回null。

與get方法一樣,你也可以給post方法第二個參數(shù)傳遞一個默認(rèn)值,如果post數(shù)組中沒找到對應(yīng)值則返回默認(rèn)值。例如:

$request->post('name', 'tom');

獲得原始請求post包體

$post = $request->rawBody();

這個功能類似與 php-fpm里的 file_get_contents("php://input");操作。用于獲得http原始請求包體。這在獲取非application/x-www-form-urlencoded格式的post請求數(shù)據(jù)時很有用。

獲取header

獲取整個header數(shù)組

$request->header();

如果請求沒有header參數(shù)則返回一個空的數(shù)組。注意所有key均為小寫。

獲取header數(shù)組的某一個值

$request->header('host');

如果header數(shù)組中不包含這個值則返回null。注意所有key均為小寫。

與get方法一樣,你也可以給header方法第二個參數(shù)傳遞一個默認(rèn)值,如果header數(shù)組中沒找到對應(yīng)值則返回默認(rèn)值。例如:

$request->header('host', 'localhost');

獲取cookie

獲取整個cookie數(shù)組

$request->cookie();

如果請求沒有cookie參數(shù)則返回一個空的數(shù)組。

獲取cookie數(shù)組的某一個值

$request->cookie('name');

如果cookie數(shù)組中不包含這個值則返回null。

與get方法一樣,你也可以給cookie方法第二個參數(shù)傳遞一個默認(rèn)值,如果cookie數(shù)組中沒找到對應(yīng)值則返回默認(rèn)值。例如:

$request->cookie('name', 'tom');

獲得所有輸入

包含了post get 的集合。

$request->all();

獲取指定輸入值

post get 的集合中獲取某個值。

$request->input('name', $default_value);

獲取部分輸入數(shù)據(jù)

post get的集合中獲取部分?jǐn)?shù)據(jù)。

// 獲取 username 和 password 組成的數(shù)組,如果對應(yīng)的key沒有則忽略
$only = $request->only(['username', 'password']);
// 獲得除了avatar 和 age 以外的所有輸入
$except = $request->except(['avatar', 'age']);

通過控制器參數(shù)獲得輸入

<?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]);
    }
}

更多信息請參考控制器參數(shù)綁定

獲取上傳文件

提示
上傳文件需要使用 multipart/form-data 格式的表單

獲取整個上傳文件數(shù)組

$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實例的數(shù)組。webman\Http\UploadFile類繼承了 PHP 內(nèi)置的 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()); // 文件是否有效,例如ture|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,單位字節(jié)
            var_export($spl_file->getPath()); // 獲得上傳的目錄,例如 '/tmp'
            var_export($spl_file->getRealPath()); // 獲得臨時文件路徑,例如 `/tmp/workerman.upload.SRliMu`
        }
        return response('ok');
    }
}

注意:

  • 文件被上傳后會被命名為一個臨時文件,類似 /tmp/workerman.upload.SRliMu
  • 上傳文件大小受到defaultMaxPackageSize限制,默認(rèn)10M,可在config/server.php文件中修改max_package_size更改默認(rèn)值。
  • 請求結(jié)束后臨時文件將被自動清除
  • 如果請求沒有上傳文件則$request->file()返回一個空的數(shù)組
  • 上傳的文件不支持 move_uploaded_file() 方法,請使用 $file->move()方法代替,參見下面的例子

獲取特定上傳文件

$request->file('avatar');

如果文件存在的話則返回對應(yīng)文件的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();

如果請求的地址是非標(biāo)準(zhǔn)的80或者443端口,host信息可能會攜帶端口,例如example.com:8080。如果不需要端口第一個參數(shù)可以傳入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()方法返回不帶有Query 參數(shù) 的 URL。

$request->url();

返回類似//www.wtbis.cn/workerman-chat

fullUrl()方法返回帶有Query 參數(shù) 的 URL。

$request->fullUrl();

返回類似//www.wtbis.cn/workerman-chat?type=download

注意
url()fullUrl() 沒有返回協(xié)議部分(沒有返回http或者h(yuǎn)ttps)。
因為瀏覽器里使用 //example.com 這樣以//開頭的地址會自動識別當(dāng)前站點的協(xié)議,自動以http或https發(fā)起請求。

如果你使用了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();

返回字符串,由字母和數(shù)字組成

獲取請求客戶端IP

$request->getRemoteIp();

獲取請求客戶端端口

$request->getRemotePort();

獲取請求客戶端真實IP

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

當(dāng)項目使用代理(例如nginx)時,使用$request->getRemoteIp()得到的往往是代理服務(wù)器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的比較可靠的方法是,已知安全的代理服務(wù)器IP,并且明確知道攜帶真實IP是哪個HTTP頭,如果$request->getRemoteIp()返回的IP確認(rèn)為已知的安全的代理服務(wù)器,然后通過$request->header('攜帶真實IP的HTTP頭')獲取真實IP。

獲取服務(wù)端IP

$request->getLocalIp();

獲取服務(wù)端端口

$request->getLocalPort();

判斷是否是ajax請求

$request->isAjax();

判斷是否是pjax請求

$request->isPjax();

判斷是否是期待json返回

$request->expectsJson();

判斷客戶端是否接受json返回

$request->acceptJson();

獲得請求的插件名

非插件請求返回空字符串''

$request->plugin;

獲得請求的應(yīng)用名

單應(yīng)用的時候始終返回空字符串'',多應(yīng)用的時候返回應(yīng)用名

$request->app;

因為閉包函數(shù)不屬于任何應(yīng)用,所以來自閉包路由的請求$request->app始終返回空字符串''
閉包路由參見 路由

獲得請求的控制器類名

獲得控制器對應(yīng)的類名

$request->controller;

返回類似 app\controller\IndexController

因為閉包函數(shù)不屬于任何控制器,所以來自閉包路由的請求$request->controller始終返回空字符串''
閉包路由參見 路由

獲得請求的方法名

獲得請求對應(yīng)的控制器方法名

$request->action;

返回類似 index

因為閉包函數(shù)不屬于任何控制器,所以來自閉包路由的請求$request->action始終返回空字符串''
閉包路由參見 路由

重寫參數(shù)

有時候我們想重寫請求的參數(shù),例如將請求過濾,然后重新賦值給請求對象,這時候我們可以使用setGet() setPost() setHeader()方法。

重寫GET參數(shù)

$request->get(); // 假設(shè)得到 ['name' => 'tom', 'age' => 18]
$request->setGet(['name' => 'tom']);
$request->get(); // 最終得到 ['name' => 'tom']

注意
如例子所示,setGet()是重寫所有GET參數(shù),setPost() setHeader() 也是同樣的行為。

重寫POST參數(shù)

$post = $request->post();
foreach ($post as $key => $value) {
    $post[$key] = htmlspecialchars($value);
}
$request->setPost($post);
$request->post(); // 得到過濾后的post參數(shù)

重寫HEADER參數(shù)

$request->setHeader(['host' => 'example.com']);
$request->header('host'); // 輸出 example.com
編輯于2025-04-30 09:20:06 完善本頁 +發(fā)起討論
贊助商