1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      Thinkphp5.1中間件怎么用

      本篇內(nèi)容介紹了“Thinkphp5.1中間件怎么用”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

      創(chuàng)新互聯(lián)專注于自流井網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供自流井營(yíng)銷型網(wǎng)站建設(shè),自流井網(wǎng)站制作、自流井網(wǎng)頁設(shè)計(jì)、自流井網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造自流井網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供自流井網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

      一、中間件的作用

      中間件主要用于攔截或過濾應(yīng)用的HTTP請(qǐng)求,并進(jìn)行必要的業(yè)務(wù)處理。比如可以使用中間件來檢查用戶的請(qǐng)求信息里是否包含一句話木馬。

      行為鉤子和中間件的區(qū)別:

      中間件:它是對(duì)項(xiàng)目請(qǐng)求做處理,在用戶訪問我們的項(xiàng)目時(shí),中間件就可以對(duì)于這個(gè)請(qǐng)求來判斷用戶是否有權(quán)限,或者判斷用戶是否存在非法訪問;

      行為鉤子:在某一動(dòng)作開始或者結(jié)束的時(shí)候會(huì)觸發(fā)的方法,比如用戶注冊(cè)成功記錄日志;

      中間件是對(duì)用戶請(qǐng)求做處理,而鉤子則是對(duì)用戶動(dòng)作的處理,中間件相當(dāng)于過濾器,鉤子相當(dāng)于事件,都是采用AOP思想。

      二、定義中間件

      首先,可以通過cmd命令行指令快速生成中間件,在項(xiàng)目的根目錄里執(zhí)行以下cmd命令:

      php think make:middleware Check

      這個(gè)指令會(huì) application/http/middleware目錄下面生成一個(gè)Check中間件,代碼如下:

      param('name') == 'index') {
                  return redirect('/');//重定向到首頁
              }
      
              return $next($request);//返回的是一個(gè)Response對(duì)象
          }
      }

      中間件說明:

      1、中間件的入口執(zhí)行方法必須是handle方法,而且第一個(gè)參數(shù)是Request對(duì)象,第二個(gè)參數(shù)是一個(gè)閉包;

      2、中間件handle方法的返回值必須是一個(gè)Response對(duì)象;

      3、中間件里可以直接使用Request對(duì)象,獲取請(qǐng)求參數(shù);

      4、在某些需求下,可以使用第三個(gè)參數(shù)傳入額外的參數(shù);

      public function handle($request, \Closure $next, $name){
          if ($name == 'index') {
              return redirect('/');//重定向到首頁
          }
      
          return $next($request);
      }

      1、前置中間件

      前置中間件的意思就是,在http請(qǐng)求完成之前,先執(zhí)行中間件的代碼。

      2、后置中間件

      后置中間件的意思就是,在http請(qǐng)求完成之后,才開始執(zhí)行中間件的代碼。

      三、注冊(cè)中間件

      1、路由中間件

      顧名思義,就是指定在某個(gè)路由下才會(huì)去調(diào)用這個(gè)中間件,即用戶訪問了這個(gè)路由鏈接,就會(huì)執(zhí)行這個(gè)中間件。

      //用戶登錄的路由
      Route::rule('login','index/User/login')->middleware('Auth');

      或者使用完整的中間件類名:

      Route::rule('login','index/User/login')->middleware(app\http\middleware\Auth::class);

      說明:中間件的注冊(cè)建議使用完整的類名,如果沒有指定命名空間則默認(rèn)使用app\http\middleware作為命名空間

      同一個(gè)路由也支持注冊(cè)多個(gè)中間件,只需要middleware()里用逗號(hào)隔開即可:

      Route::rule('login','index/User/login')->middleware(['Auth', 'Check']);

      Thinkphp5.1.8+ 版本后,支持對(duì)路由分組注冊(cè)中間件,如下:

      //一個(gè)名為user的路由分組
      Route::group('user', function(){
      	Route::rule('login','index/User/login');
          Route::rule('register','index/User/register');
      })->middleware('Auth');

      2、全局中間件

      意思就是說,所有的(全局)http訪問請(qǐng)求,都會(huì)自動(dòng)調(diào)用這個(gè)中間件。

      在application目錄下創(chuàng)建middleware.php文件,代碼如下:

      3、模塊中間件

      Thinkphp5.1.8+版本以上支持模塊中間件定義,你可以直接在模塊目錄下面增加middleware.php文件,定義方式和全局中間件定義一樣,只是只會(huì)在該模塊下面生效。

      4、控制器中間件

      Thinkphp5.1.17+版本以上支持為控制器定義中間件。首先你的控制器需要繼承系統(tǒng)的think\Controller類,然后在控制器中定義middleware屬性,例如:

      5、使用閉包定義中間件

      在某些簡(jiǎn)單的場(chǎng)合,我們不需要使用中間件類,這時(shí)候可以使用閉包定義中間件,但閉包函數(shù)必須返回Response對(duì)象實(shí)例。

      Route::group('hello', function(){
      	Route::rule('login','index/User/login');
      })->middleware(function($request,\Closure $next){
          if ($request->param('name') == 'index') {
              return redirect('/');//重定向到首頁
          }    
      	return $next($request);
      });

      四、給中間件傳入?yún)?shù)

      1、全局中間件傳參數(shù)

      上面的定義表示給Auth中間件傳入?yún)?shù)為張三,給Check中間件傳入?yún)?shù)為李四

      2、路由中間件傳參數(shù)

      (1)、給Auth中間件傳入?yún)?shù)張三

      Route::rule('login','index/User/login')->middleware('Auth:張三');

      也可以這樣寫:

      Route::rule('login','index/User/login')->middleware(Auth::class, '張三');

      (2)、給多個(gè)中間件傳入同一個(gè)參數(shù)

      Route::rule('login','index/User/login')->middleware([Auth::class, 'Check'], '張三');

      (3)、單獨(dú)指定各個(gè)中間件的參數(shù)

      Route::rule('login','index/user/login')->middleware(['Auth:張三', 'Check:李四']);

      五、中間件向控制器傳參數(shù)

      前面講的給中間件傳入特定的參數(shù) (常量),那么中間要如何向控制器傳入?yún)?shù)呢?我們可以通過給Request請(qǐng)求對(duì)象賦值的方式傳參給控制器(或者其它地方),例如:

      result = '驗(yàn)證成功';       
              return $next($request);
          }
      }

      需要特別注意:傳遞的變量名稱不要和Request已有的參數(shù)變量名有沖突,比如用戶登錄請(qǐng)求的Request參數(shù)里已經(jīng)有一個(gè)username,那么中間件向控制器傳參,就不能再用這個(gè)username了,否則會(huì)改變?cè)瓉韰?shù)的值。

      然后在控制器的方法里面可以直接使用:

      public function index(Request $request)
      {
      	return $request->result;
      }

      “Thinkphp5.1中間件怎么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


      網(wǎng)站名稱:Thinkphp5.1中間件怎么用
      地址分享:http://ef60e0e.cn/article/poocss.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        黔西| 樟树市| 东乌| 朝阳市| 砚山县| 福鼎市| 大城县| 襄樊市| 淮阳县| 松江区| 浏阳市| 卫辉市| 云龙县| 无棣县| 宁明县| 泽州县| 肃宁县| 黑水县| 林西县| 黄石市| 曲沃县| 虹口区| 淮安市| 科技| 厦门市| 迁安市| 蛟河市| 顺义区| 呈贡县| 荥经县| 开化县| 大理市| 霍州市| 繁昌县| 宜兴市| 湛江市| 兴仁县| 晋宁县| 东方市| 射阳县| 盖州市|