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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 基礎 —— HTTP 中間件 ## 1、簡介 HTTP。例如,Laravel包含了一個中間件來驗證用戶是否經過授權,如果用戶沒有經過授權,中間件會將用戶重定向到登錄頁面,否則如果用戶經過授權,中間件就會允許請求繼續往前進入下一步操作。 當然,除了認證之外,中間件還可以被用來處理更多其它任務。比如:CORS中間件可以用于為離開站點的響應添加合適的頭(跨域);日志中間件可以記錄所有進入站點的請求。 Laravel框架內置了一些中間件,包括維護模式中間件、認證、CSRF保護中間件等等。所有的中間件都位于`app/Http/Middleware`目錄。 ## 2、定義中間件 想要創建一個新的中間件,可以通過Artisan命令`make:middleware`: ~~~ php artisan make:middleware OldMiddleware ~~~ 這個命令會在`app/Http/Middleware`目錄下創建一個新的中間件類`OldMiddleware`,在這個中間件中,我們只允許提供的age大于200的訪問路由,否則,我們將用戶重定向到主頁: ~~~ <?php namespace App\Http\Middleware; use Closure; class OldMiddleware { /** * 返回請求過濾器 * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if ($request->input('age') <= 200) { return redirect('home'); } return $next($request); } } ~~~ 正如你所看到的,如果`age<=200`,中間件會返回一個HTTP重定向到客戶端;否則,請求會被傳遞下去。將請求往下傳遞可以通過調用回調函數`$next`。 理解中間件的最好方式就是將中間件看做HTTP請求到達目標之前必須經過的“層”,每一層都會檢查請求甚至會完全拒絕它。 ### 2.1 中間件之前/之后 一個中間件是否請求前還是請求后執行取決于中間件本身。比如,以下中間件會在請求處理前執行一些任務: ~~~ <?php namespace App\Http\Middleware; use Closure; class BeforeMiddleware { public function handle($request, Closure $next) { // 執行動作 return $next($request); } } ~~~ 然而,下面這個中間件則會在請求處理后執行其任務: ~~~ <?php namespace App\Http\Middleware; use Closure; class AfterMiddleware { public function handle($request, Closure $next) { $response = $next($request); // 執行動作 return $response; } } ~~~ ## 3、注冊中間件 ### 3.1 全局中間件 如果你想要中間件在每一個HTTP請求期間被執行,只需要將相應的中間件類放到`app/Http/Kernel.php`的數組屬性`$middleware`中即可。 ### 3.2 分配中間件到路由 如果你想要分配中間件到指定路由,首先應該在`app/Http/Kernel.php`文件中分配給該中間件一個簡寫的key,默認情況下,該類的`$routeMiddleware`屬性包含了Laravel內置的入口中間件,添加你自己的中間件只需要將其追加到后面并為其分配一個key: ~~~ // 在 App\Http\Kernel 里中 protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,]; ~~~ 中間件在HTTP kernel中被定義后,可以在路由選項數組中使用`$middleware`鍵來指定中間件: ~~~ Route::get('admin/profile', ['middleware' => 'auth', function () { // }]); ~~~ ## 4、中間件參數 中間件還可以接收額外的自定義參數,比如,如果應用需要在執行動作之前驗證認證用戶是否擁有指定的角色,可以創建一個`RoleMiddleware`來接收角色名作為額外參數。 額外的中間件參數會在$next參數之后傳入中間件: ~~~ <?php namespace App\Http\Middleware; use Closure; class RoleMiddleware { /** * 運行請求過濾器 * * @param \Illuminate\Http\Request $request * @param \Closure $next * @param string $role * @return mixed * translator http://laravelacademy.org */ public function handle($request, Closure $next, $role) { if (! $request->user()->hasRole($role)) { // Redirect... } return $next($request); } } ~~~ 中間件參數可以在定義路由時通過:分隔中間件名和參數名來指定,多個中間件參數可以通過逗號分隔: ~~~ Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) { // }]); ~~~ ## 5、可終止的中間件 有時候中間件可能需要在HTTP響應發送到瀏覽器之后做一些工作。比如,Laravel內置的“session”中間件會在響應發送到瀏覽器之后將session數據寫到存儲器中,為了實現這個,定義一個可終止的中間件并添加`terminate`方法到這個中間件: ~~~ <?php namespace Illuminate\Session\Middleware; use Closure; class StartSession { public function handle($request, Closure $next) { return $next($request); } public function terminate($request, $response) { // 存儲session數據... } } ~~~ `terminate`方法將會接收請求和響應作為參數。一旦你定義了一個可終止的中間件,應該將其加入到HTTP kernel的全局中間件列表中。 當調用中間件上的`terminate`方法時,Laravel將會從[服務容器](http://laravelacademy.org/post/93.html)中取出該中間件的新的實例,如果你想要在調用`handle`和`terminate`方法時使用同一個中間件實例,則需要使用容器的`singleton`方法將該中間件注冊到容器中。 > 擴展閱讀:[中間件實例教程 —— 中間件的創建使用及中間件參數定義](http://laravelacademy.org/post/537.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>

                              哎呀哎呀视频在线观看