<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 基礎 —— HTTP 請求 ## 1、訪問請求 通過依賴注入獲取當前HTTP請求實例,應該在控制器的構造函數或方法中對`Illuminate\Http\Request`類進行類型提示,當前請求實例會被[服務容器](http://laravelacademy.org/post/93.html)自動注入: ~~~ <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Routing\Controller; class UserController extends Controller { /** * 存儲新用戶 * * @param Request $request * @return Response */ public function store(Request $request) { $name=$request->input('name'); // } } ~~~ 如果你的控制器方法還期望獲取路由參數輸入,只需要將路由參數置于其它依賴之后即可,例如,如果你的路由定義如下: ~~~ Route::put('user/{id}','UserController@update'); ~~~ 你仍然可以對`Illuminate\Http\Request`進行類型提示并通過如下方式定義控制器方法來訪問路由參數: ~~~ <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Routing\Controller; classUser Controller extends Controller { /** * 更新指定用戶 * * @param Request $request * @param int $id * @return Response */ public function update(Request $request,$id) { // } } ~~~ ### 1.1 基本請求信息 `Illuminate\Http\Request`實例提供了多個方法來檢測應用的HTTP請求,Laravel的`Illuminate\Http\Request`繼承自`Symfony\Component\HttpFoundation\Request`類,這里列出了一些該類中的有用方法: ### 1.1.1 獲取請求URI path方法將會返回請求的URI,因此,如果進入的請求路徑是`http://domain.com/foo/bar`,則`path`方法將會返回`foo/bar`: ~~~ $uri=$request->path(); ~~~ `is`方法允許你驗證進入的請求是否與給定模式匹配。使用該方法時可以使用`*`通配符: ~~~ if($request->is('admin/*')){ // } ~~~ 想要獲取完整的URL,而不僅僅是路徑信息,可以使用請求實例中的`url`方法: ~~~ $url=$request->url(); ~~~ ### 1.1.2 獲取請求方法 `method`方法將會返回請求的HTTP請求方式。你還可以使用`isMethod`方法來驗證HTTP請求方式是否匹配給定字符串: ~~~ $method=$request->method(); if($request->isMethod('post')){ // } ~~~ ### 1.2?PSR-7?請求 [PSR-7標準](http://www.php-fig.org/psr/psr-7/)指定了HTTP消息接口,包括請求和響應。如果你想要獲取PSR-7請求實例,首先需要安裝一些庫,Laravel使用Symfony HTTP Message Bridge組件將典型的Laravel請求和響應轉化為PSR-7兼容的實現: ~~~ composer require symfony/psr-http-message-bridge composer require zendframework/zend-diactoros ~~~ 安裝完這些庫之后,你只需要在路由或控制器中通過對請求類型進行類型提示就可以獲取PSR-7請求: ~~~ use Psr\Http\Message\ServerRequestInterface; Route::get('/', function (ServerRequestInterface $request) { // }); ~~~ 如果從路由或控制器返回的是PSR-7響應實例,則其將會自動轉化為Laravel響應實例并顯示出來。 ### 2、獲取輸入 **獲取輸入值** 使用一些簡單的方法,就可以從`Illuminate\Http\Request`實例中訪問用戶輸入。你不需要擔心請求所使用的HTTP請求方法,因為對所有請求方式的輸入訪問接口都是一致的: ~~~ $name = $request->input('name'); ~~~ 你還可以傳遞一個默認值作為第二個參數給`input`方法,如果請求輸入值在當前請求未出現時該值將會被返回: ~~~ $name = $request->input('name', 'Sally'); ~~~ 處理表單數組輸入時,可以使用”.”來訪問數組: ~~~ $input = $request->input('products.0.name'); ~~~ **判斷輸入值是否出現** 判斷值是否在請求中出現,可以使用`has`方法,如果值出現過了且不為空,`has`方法返回`true`: ~~~ if ($request->has('name')) { // } ~~~ **獲取所有輸入數據** 你還可以通過`all`方法獲取所有輸入數據: ~~~ $input = $request->all(); ~~~ **獲取輸入的部分數據** 如果你需要取出輸入數據的子集,可以使用`only`或`except`方法,這兩個方法都接收一個數組作為唯一參數: ~~~ $input = $request->only('username', 'password'); $input = $request->except('credit_card'); ~~~ ### 2.1 上一次請求輸入 Laravel允許你在兩次請求之間保存輸入數據,這個特性在檢測校驗數據失敗后需要重新填充表單數據時很有用,但如果你使用的是Laravel內置的[驗證服務](http://laravelacademy.org/post/240.html),則不需要手動使用這些方法,因為一些Laravel內置的校驗設置會自動調用它們。 ### 2.1.1 將輸入存儲到一次性Session `Illuminate\Http\Request`實例的`flash`方法會將當前輸入存放到一次性[session](http://laravelacademy.org/post/230.html)(所謂的一次性指的是從session中取出數據中,對應數據會從session中銷毀)中,這樣在下一次請求時數據依然有效: ~~~ $request->flash(); ~~~ 你還可以使用`flashOnly`和`flashExcept`方法將輸入數據子集存放到session中: ~~~ $request->flashOnly('username', 'email'); $request->flashExcept('password'); ~~~ ### 2.1.2 將輸入存儲到一次性Session然后重定向 如果你經常需要一次性存儲輸入并重定向到前一頁,可以簡單使用`withInput`方法來將輸入數據鏈接到`redirect`后面: ~~~ return redirect('form')->withInput(); return redirect('form')->withInput($request->except('password')); ~~~ ### 2.1.3 取出上次請求數據 要從session中取出上次請求的輸入數據,可以使用Request實例的`old`方法。`old`方法提供了便利的方式從[session](http://laravelacademy.org/post/230.html)中取出一次性數據: ~~~ $username = $request->old('username'); ~~~ Laravel還提供了一個全局的幫助函數`old`,如果你是在[Blade模板](http://laravelacademy.org/post/79.html)中顯示老數據,使用幫助函數`old`更方便: ~~~ {{ old('username') }} ~~~ ### 2.2?Cookies ### 2.2.1 從請求中取出Cookies Laravel框架創建的所有cookies都經過加密并使用一個認證碼進行簽名,這意味著如果客戶端修改了它們則需要對其進行有效性驗證。我們使用`Illuminate\Http\Request`實例的cookie方法從請求中獲取cookie的值: ~~~ $value = $request->cookie('name'); ~~~ ### 2.2.2 新增Cookie Laravel提供了一個全局的幫助函數`cookie`作為一個簡單工廠來生成新的`Symfony\Component\HttpFoundation\Cookie`實例,新增的cookies通過`withCookie`方法被附加到`Illuminate\Http\Response`實例: ~~~ $response = new Illuminate\Http\Response('Hello World'); $response->withCookie(cookie('name', 'value', $minutes)); return $response; ~~~ 想要創建一個長期有效的cookie,可以使用cookie工廠的`forever`方法: ~~~ $response->withCookie(cookie()->forever('name', 'value')); ~~~ ### 2.3?文件上傳 ### 2.3.1 獲取上傳的文件 可以使用`Illuminate\Http\Request`實例的`file`方法來訪問上傳文件,該方法返回的對象是`Symfony\Component\HttpFoundation\File\UploadedFile`類的一個實例,該類繼承自PHP標準庫中提供與文件交互方法的`SplFileInfo`類: ~~~ $file = $request->file('photo'); ~~~ ### 2.3.2 驗證文件是否存在 使用hasFile方法判斷文件在請求中是否存在: ~~~ if ($request->hasFile('photo')) { // } ~~~ ### 2.3.3 驗證文件是否上傳成功 使用isValid方法判斷文件在上傳過程中是否出錯: ~~~ if ($request->file('photo')->isValid()){ // } ~~~ ### 2.3.4 保存上傳的文件 使用`move`方法將上傳文件保存到新的路徑,該方法將上傳文件從臨時目錄(在PHP配置文件中配置)移動到指定新目錄: ~~~ $request->file('photo')->move($destinationPath); $request->file('photo')->move($destinationPath, $fileName); ~~~ ### 2.3.5 其它文件方法 `UploadedFile`實例中很有很多其它方法,查看[該類的API](http://api.symfony.com/2.7/Symfony/Component/HttpFoundation/File/UploadedFile.html)了解更多相關方法。 > 擴展閱讀:[實例教程 ——?獲取請求數據、Cookie及文件上傳處理](http://laravelacademy.org/post/606.html)
                  <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>

                              哎呀哎呀视频在线观看