從ThinkPHP6開始,一個(gè)叫做“中間件”的名詞出現(xiàn)在了官方手冊(cè)中,那么中間件是用來干什么的?又應(yīng)該如何使用呢?下面咱們慢慢分析。
首先看下中間件官網(wǎng)的定義:
中間件主要用于攔截或過濾應(yīng)用的 HTTP 請(qǐng)求,并進(jìn)行必要的業(yè)務(wù)處理。
從字面意思上不難理解,中間件就是在我們請(qǐng)求控制器的方法之前,中間件就可以攔截或者做其他的事情。
我們?cè)趙ww.blog.com中的index控制中的index方法中就寫一行代碼:
echo "index方法";
我們來測(cè)試下定義了中間件會(huì)有什么事情發(fā)生?
一、中間件的定義
我們下載好ThinkPHP6框架后,在app下有middleware.php,這個(gè)文件就是中間件的定義文件,我們注意下它的位置,它沒有放在任何應(yīng)用下面,而是在app下面和BaseController.php是相同目錄的,因此它是一個(gè)全局中間件。
定義中間件很簡單,我們有兩個(gè)方法:
1、用命令行。php think make:middleware Check。這個(gè)使用后的感受就一個(gè)字:快!真快!中間件定義瞬間完成。
2、復(fù)制粘貼,我們?cè)赼pp下建立middleware目錄,并且建立一個(gè) Check.php的中間件:
<?php namespace appmiddleware; class Check { public function handle($request, Closure $next) { echo "app中間件"; return $next($request); } }
中間件定義完了,為啥沒生效?
按照上面的中間件定義步驟,中間件定義完成,但是并沒有生效,是什么原因呢?
原因是沒有在配置文件中啟動(dòng)。如何操作?
打開appmiddleware.php,在最小面添加如下代碼:
appmiddlewareCheck::class
我們?cè)俅卧L問www.blog.com就會(huì)發(fā)現(xiàn),先輸出中間件的內(nèi)容,再輸入控制器的內(nèi)容。
這也就是應(yīng)證了官方對(duì)中間件的定義,在執(zhí)行方法前先去執(zhí)行對(duì)應(yīng)的中間件。