<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 功能強大 支持多語言、二開方便! 廣告
                # 15. 插件中間件 ## 插件中間件 插件中間件用于訪問插件前臺、或前臺、后臺時對HTTP請求攔截或過濾。例如你可以使用中間件控制哪些方法需要登錄才能訪問。 > 注意:2.1.220220版本暫時不支持控制器中間件,訪問插件前臺可以使用的addonMiddleware事件,該事件監聽所有訪問插件前臺的操作,詳情前往插件事件了解。 ## 創建中間件 中間件放置于:addons/demo/middleware/ ![](https://img.kancloud.cn/52/f6/52f6f241e0b4d75a4bdc422d00fbc1d4_275x202.png) 示例代碼: ``` <pre class="calibre16">``` <span class="token"><</span><span class="token">?</span>php declare <span class="token1">(</span>strict_types<span class="token">=</span><span class="token3">1</span><span class="token1">)</span><span class="token1">;</span> namespace addons\demo\middleware<span class="token1">;</span> class <span class="token6">Login</span> <span class="token1">{</span> <span class="token5">// handle 為入口執行方法,必須。第一個參數是`Request`對象,第二個參數是一個閉包。</span> public <span class="token2">function</span> <span class="token6">handle</span><span class="token1">(</span>$request<span class="token1">,</span> \Closure $next<span class="token1">)</span> <span class="token1">{</span> <span class="token5">// 判斷session里面有用戶信息,沒有說明沒有登錄,跳轉到登錄頁</span> <span class="token2">if</span> <span class="token1">(</span><span class="token">!</span>$request<span class="token">-</span><span class="token">></span><span class="token6">session</span><span class="token1">(</span><span class="token4">'User'</span><span class="token1">)</span><span class="token1">)</span> <span class="token1">{</span> <span class="token2">return</span> <span class="token6">redirect</span><span class="token1">(</span><span class="token1">(</span>string<span class="token1">)</span><span class="token6">addons_url</span><span class="token1">(</span><span class="token4">'login/index'</span><span class="token1">)</span><span class="token1">)</span><span class="token1">;</span> <span class="token1">}</span> <span class="token2">return</span> $<span class="token6">next</span><span class="token1">(</span>$request<span class="token1">)</span><span class="token1">;</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` `前置中間件`:寫在請求具體操作前為前置中間件,即:`$next($request);`前,如上面所示 `后置中間件`:執行完請求后為后置中間件,即:`$next($request);`后面 ``` <pre class="calibre16">``` <span class="token"><</span><span class="token">?</span>php declare <span class="token1">(</span>strict_types<span class="token">=</span><span class="token3">1</span><span class="token1">)</span><span class="token1">;</span> namespace addons\demo\middleware<span class="token1">;</span> class <span class="token6">Login</span> <span class="token1">{</span> <span class="token5">// handle 為入口執行方法,必須。第一個參數是`Request`對象,第二個參數是一個閉包。</span> public <span class="token2">function</span> <span class="token6">handle</span><span class="token1">(</span>$request<span class="token1">,</span> \Closure $next<span class="token1">)</span> <span class="token1">{</span> $response <span class="token">=</span> $<span class="token6">next</span><span class="token1">(</span>$request<span class="token1">)</span><span class="token1">;</span> <span class="token5">// 需要的操作</span> <span class="token1">.</span><span class="token1">.</span><span class="token1">.</span> <span class="token5">// 返回響應</span> <span class="token2">return</span> $response<span class="token1">;</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` 中間件傳值到控制器方法 ``` <pre class="calibre16">``` <span class="token"><</span><span class="token">?</span>php declare <span class="token1">(</span>strict_types<span class="token">=</span><span class="token3">1</span><span class="token1">)</span><span class="token1">;</span> namespace addons\demo\middleware<span class="token1">;</span> class <span class="token6">Login</span> <span class="token1">{</span> <span class="token5">// handle 為入口執行方法,必須。第一個參數是`Request`對象,第二個參數是一個閉包。</span> public <span class="token2">function</span> <span class="token6">handle</span><span class="token1">(</span>$request<span class="token1">,</span> \Closure $next<span class="token1">)</span> <span class="token1">{</span> $request<span class="token">-</span><span class="token">></span>Demo <span class="token">=</span> <span class="token3">1</span><span class="token1">;</span> <span class="token5">// 控制器里面 request()->Demo 即可獲取值</span> <span class="token2">return</span> $<span class="token6">next</span><span class="token1">(</span>$request<span class="token1">)</span><span class="token1">;</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` ## 使用中間件 執行順序分別為: > 插件全局中間件->控制器中間件 ## 插件全局中間件 內置有插件全局中間件,可通過`addonMiddleware`事件來執行。 ## 控制器中間件 控制器中間件在插件控制器里面注冊,如下,定義后訪問Index控制器的任意方法都會經過中間件。 ``` <pre class="calibre16">``` <span class="token"><</span><span class="token">?</span>php namespace addons\demo\controller<span class="token1">;</span> use think\addons\Controller<span class="token1">;</span> class <span class="token6">Index</span> extends <span class="token6">Controller</span> <span class="token1">{</span> <span class="token5">// 控制器中間件</span> public $middleware <span class="token">=</span> <span class="token1">[</span> \addons\demo\middleware\Login<span class="token1">:</span><span class="token1">:</span>class <span class="token1">]</span><span class="token1">;</span> public <span class="token2">function</span> <span class="token6">index</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> echo <span class="token4">"登錄成功"</span><span class="token1">;</span> <span class="token1">}</span> public <span class="token2">function</span> <span class="token6">login</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> echo <span class="token4">"登錄頁"</span><span class="token1">;</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` 使用except/only來設置生效的操作 only 示例 ``` <pre class="calibre16">``` <span class="token5">// 控制器中間件</span> public $middleware <span class="token">=</span> <span class="token1">[</span> \addons\demo\middleware\Login<span class="token1">:</span><span class="token1">:</span>class<span class="token">=</span><span class="token">></span><span class="token1">[</span><span class="token4">'only'</span><span class="token">=</span><span class="token">></span><span class="token1">[</span><span class="token4">'index'</span><span class="token1">,</span><span class="token4">'test'</span><span class="token1">]</span><span class="token1">]</span> <span class="token5">// Login中間僅對index、test方法攔截</span> <span class="token1">]</span><span class="token1">;</span> ``` ``` except 示例 ``` <pre class="calibre20">``` <span class="token5">// 控制器中間件</span> public $middleware <span class="token">=</span> <span class="token1">[</span> \addons\demo\middleware\Login<span class="token1">:</span><span class="token1">:</span>class<span class="token">=</span><span class="token">></span><span class="token1">[</span><span class="token4">'except'</span><span class="token">=</span><span class="token">></span><span class="token1">[</span><span class="token4">''</span>test'<span class="token1">]</span><span class="token1">]</span> <span class="token5">// 除了test方法,其他的所有操作方法都會經過Login中間件</span> <span class="token1">]</span><span class="token1">;</span> ``` ```
                  <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>

                              哎呀哎呀视频在线观看