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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 示意圖 ![](https://box.kancloud.cn/45221b32728296e8448510639e327307_992x638.jpg) # 簡介 中間件是一個閉包,而且返回一個閉包。中間件為過濾進入應用的HTTP請求提供了一套便利的機制,可以分為前置中間件和后置中間件。常用于驗證用戶是否經 過認證,添加響應頭(跨域),記錄請求日志等。 # 代碼 ~~~ <?php // 框架核心應用層 $application = function($name) { echo "this is a {$name} application\n"; }; // 前置校驗中間件 $auth = function($handler) { return function($name) use ($handler) { echo "{$name} need a auth middleware\n"; return $handler($name); }; }; // 前置過濾中間件 $filter = function($handler) { return function($name) use ($handler) { echo "{$name} need a filter middleware\n"; return $handler($name); }; }; // 后置日志中間件 $log = function($handler) { return function($name) use ($handler) { $return = $handler($name); echo "{$name} need a log middleware\n"; return $return; }; }; // 中間件棧 $stack = []; // 打包 function pack_middleware($handler, $stack) { foreach (array_reverse($stack) as $key => $middleware) { $handler = $middleware($handler); } return $handler; } // 注冊中間件 // 這里用的都是全局中間件,實際應用時還可以為指定路由注冊局部中間件 $stack['log'] = $log; $stack['filter'] = $filter; $stack['auth'] = $auth; $run = pack_middleware($application, $stack); $run('Laravle'); ~~~ 輸出: Laravle need a filter middleware Laravle need a auth middleware this is a Laravle application Laravle need a log middleware 打包程序 中間件的執行順序是由打包函數(pack_middleware)決定,這里返回的閉包實際上相當于: ~~~ $run = $log($filter($auth($application))); $run('Laravle'); ~~~ # 編寫規范 中間件要要滿足一定的規范:總是返回一個閉包,閉包中總是傳入相同的參數(由主要邏輯決定), 閉包總是返回句柄(handler)的執行結果; 如果中間件的邏輯在返回句柄return $handler($name)前完成,就是前置中間件,否則為后置中間件。
                  <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>

                              哎呀哎呀视频在线观看