<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 輸入變量 可以通過`Request`對象完成全局輸入變量的檢測、獲取和安全過濾,支持包括`$_GET`、`$_POST`、`$_REQUEST`、`$_SERVER`、`$_SESSION`、`$_COOKIE`、`$_ENV`等系統變量,以及文件上傳信息。 為了方便說明,本篇內容的所有示例代碼均使用`Facade`方式,因此需要首先引入 ``` use think\facade\Request; ``` 如果你使用的是依賴注入,請自行調整代碼為動態調用即可。 主要內容包括: - [檢測變量是否設置](#_12) - [變量獲取](#_23) - [默認值](#_107) - [變量過濾](#_118) - [獲取部分變量](#_167) - [變量修飾符](#_222) - [修改變量](#_250) - [助手函數](#_289) ## 檢測變量是否設置 可以使用`has`方法來檢測一個變量參數是否設置,如下: ``` Request::has('id','get'); Request::has('name','post'); ``` 變量檢測可以支持所有支持的系統變量。 ## 變量獲取 變量獲取使用`\think\Request`類的如下方法及參數: > ### 變量類型方法('變量名/變量修飾符','默認值','過濾方法') 變量類型方法包括: 方法描述param獲取當前請求的變量get獲取 $\_GET 變量post獲取 $\_POST 變量put獲取 PUT 變量delete獲取 DELETE 變量session獲取 $\_SESSION 變量cookie獲取 $\_COOKIE 變量request獲取 $\_REQUEST 變量server獲取 $\_SERVER 變量env獲取 $\_ENV 變量route獲取 路由(包括PATHINFO) 變量file獲取 $\_FILES 變量### 獲取`PARAM`變量 `PARAM`類型變量是框架提供的用于自動識別當前請求的一種變量獲取方式,是系統推薦的獲取請求參數的方法,用法如下: ``` // 獲取當前請求的name變量 Request::param('name'); // 獲取當前請求的所有變量(經過過濾) Request::param(); // 獲取當前請求的所有變量(原始數據) Request::param(false); // 獲取當前請求的所有變量(包含上傳文件) Request::param(true); ``` 如果你使用了依賴注入的方式,可以更簡單的方式獲取請求變量。 ``` namespace app\index\controller; use think\Request; class Index { public function index(Request $request) { // 獲取name請求變量 return $request->name; } } ``` > param方法會把當前請求類型的參數和路由變量以及GET請求合并,并且路由變量是優先的。 其它的輸入變量獲取方法用法基本一致,以`post`方法為例主要有如下三種用法。 ``` Request::post('name'); // 獲取某個post變量 Request::post(); // 獲取經過全局過濾的全部post變量 Request::post(false); // 獲取全部的post原始(未經全局過濾)變量 ``` 你無法使用**get方法獲取路由變量**,例如當訪問地址是 ``` http://localhost/index.php/index/index/hello/name/thinkphp ``` 下面的用法是錯誤的 ``` echo Request::get('name'); // 輸出為空 ``` 正確的用法是 ``` echo Request::param('name'); // 輸出thinkphp echo Request::route('name'); // 輸出thinkphp ``` > 變量名區分大小寫,除了`server`和`env`方法的變量名不區分大小寫(會自動轉為大寫后獲取)。 ## 默認值 獲取輸入變量的時候,可以支持默認值,例如當URL中不包含`$_GET['name']`的時候,使用下面的方式輸出的結果比較。 ``` Request::get('name'); // 返回值為null Request::get('name',''); // 返回值為空字符串 Request::get('name','default'); // 返回值為default ``` 前面提到的方法都支持在第二個參數中傳入默認值的方式。 ## 變量過濾 > 框架默認沒有設置任何全局過濾規則,你可以在應用配置文件中設置全局的過濾規則: ``` // 默認全局過濾方法 用逗號分隔多個 'default_filter' => 'htmlspecialchars', ``` 也支持使用`Request`對象進行全局變量的獲取過濾,過濾方式包括函數、方法過濾,以及PHP內置的Types of filters,我們可以設置全局變量過濾方法,支持設置多個過濾方法,例如: ``` Request::filter(['strip_tags','htmlspecialchars']), ``` 也可以在獲取變量的時候添加過濾方法,例如: ``` Request::get('name','','htmlspecialchars'); // 獲取get變量 并用htmlspecialchars函數過濾 Request::param('username','','strip_tags'); // 獲取param變量 并用strip_tags函數過濾 Request::post('name','','org\Filter::safeHtml'); // 獲取post變量 并用org\Filter類的safeHtml方法過濾 ``` 可以支持傳入多個過濾規則,例如: ``` Request::param('username','','strip_tags,strtolower'); // 獲取param變量 并依次調用strip_tags、strtolower函數過濾 ``` Request對象還支持PHP內置提供的Filter ID過濾,例如: ``` Request::post('email','',FILTER_VALIDATE_EMAIL); ``` 框架對FilterID做了轉換支持,因此也可以使用字符串的方式,例如: ``` Request::post('email','','email'); ``` 采用字符串方式定義`FilterID`的時候,系統會自動進行一次`filter_id`調用轉換成`Filter`常量。 具體的字符串根據`filter_list`函數的返回值來定義。 > 需要注意的是,采用Filter ID 進行過濾的話,如果不符合過濾要求的話 會返回false,因此你需要配合默認值來確保最終的值符合你的規范。 例如, ``` Request::post('email','',FILTER_VALIDATE_EMAIL); ``` 就表示,如果不是規范的`email`地址的話 返回空字符串。 如果當前不需要進行任何過濾的話,可以使用 ``` // 獲取get變量 并且不進行任何過濾 即使設置了全局過濾 Request::get('name', '', null); ``` ## 獲取部分變量 如果你只需要獲取當前請求的部分參數,可以使用: ``` // 只獲取當前請求的id和name變量 Request::only('id,name'); ``` 或者使用數組方式 ``` // 只獲取當前請求的id和name變量 Request::only(['id','name']); ``` > 采用`only`方法能夠安全的獲取你需要的變量,避免額外變量影響數據處理和寫入。 `V5.1.3+`版本開始,only方法可以支持批量設置默認值,如下: ``` // 設置默認值 Request::only(['id'=>0,'name'=>'']); ``` 表示`id`的默認值為0,`name`的默認值為空字符串。 默認獲取的是當前請求參數(`PARAM`類型變量),如果需要獲取其它類型的參數,可以在第二個參數傳入,例如: ``` // 只獲取GET請求的id和name變量 Request::only(['id','name'], 'get'); // 只獲取POST請求的id和name變量 Request::only(['id','name'], 'post'); ``` 也支持排除某些變量后獲取,例如 ``` // 排除id和name變量 Request::except('id,name'); ``` 或者使用數組方式 ``` // 排除id和name變量 Request::except(['id','name']); ``` 同樣支持指定變量類型獲取: ``` // 排除GET請求的id和name變量 Request::except(['id','name'], 'get'); // 排除POST請求的id和name變量 Request::except(['id','name'], 'post'); ``` ## 變量修飾符 支持對變量使用修飾符功能,可以一定程度上簡單過濾變量,更為嚴格的過濾請使用前面提過的變量過濾功能。 用法如下: > ### Request::變量類型('變量名/修飾符'); 默認的變量修飾符是`/s`,因此默認的單個變量的取值返回的都是字符串,如果需要傳入字符串之外的變量可以使用下面的修飾符,包括: 修飾符作用s強制轉換為字符串類型d強制轉換為整型類型b強制轉換為布爾類型a強制轉換為數組類型f強制轉換為浮點類型下面是一些例子: ``` Request::get('id/d'); Request::post('name/s'); Request::post('ids/a'); ``` > 如果你要獲取的數據為數組,請一定注意要加上 `/a` 修飾符才能正確獲取到。 ## 修改變量 如果需要更改或者額外增加請求變量的值,可以通過下面的方式: ``` // 更改GET變量 Request::get(['id'=>10]); // 更改POST變量 Request::post(['name'=>'thinkphp']); ``` 盡量避免直接修改`$_GET` 或者 `$_POST`數據,同時也不能直接修改`param`變量,下面的操作是無效的: ``` // 更改請求變量 Request::param(['id'=>10]); ``` > 更改當前請求類型對應的變量參數后,`param`方法的參數值會自動更新。 `V5.1.12+`版本開始,可以(通常是在中間件里面)設置請求變量的值。 ``` <?php namespace app\http\middleware; class Check { public function handle($request, \Closure $next) { if ('think' == $request->name) { $request->name = 'ThinkPHP'; } return $next($request); } } ``` ## 助手函數 為了簡化使用,還可以使用系統提供的`input`助手函數完成上述大部分功能。 判斷變量是否定義 ``` input('?get.id'); input('?post.name'); ``` 獲取PARAM參數 ``` input('param.name'); // 獲取單個參數 input('param.'); // 獲取全部參數 // 下面是等效的 input('name'); input(''); ``` 獲取GET參數 ``` // 獲取單個變量 input('get.id'); // 使用過濾方法獲取 默認為空字符串 input('get.name'); // 獲取全部變量 input('get.'); ``` 使用過濾方法 ``` input('get.name','','htmlspecialchars'); // 獲取get變量 并用htmlspecialchars函數過濾 input('username','','strip_tags'); // 獲取param變量 并用strip_tags函數過濾 input('post.name','','org\Filter::safeHtml'); // 獲取post變量 并用org\Filter類的safeHtml方法過濾 ``` 使用變量修飾符 ``` input('get.id/d'); input('post.name/s'); input('post.ids/a'); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看