說一說ThinkPHP6中五花八門的中間件

在thinkphp6中新增中間件功能,而且中間件又分很多類型的中間件,很多新手對thinkphp6中間件很犯難,下面就給大家分別介紹下。

全局中間件:

我們下載好ThinkPHP6的框架后,在app目錄下就有一個middleware.php,我們在app目錄下定義的中間件叫做全局中間件,全局中間件是對所有應用都生效的中間件。

應用中間件:

那換而言之,如果我們再復制一份middleware.php放在了某個應用下,比如index應用,是不是就叫做應用中間件呢,答案是對的。

立即學習PHP免費學習筆記(深入)”;

控制器中間件:

如果在控制器中操作中間件,是不是就叫做控制器中間件?

路由中間件:

那可不可以在路由中也定義中間件,比如我只想讓某個請求使用某個中間件,其他的并不想使用中間件,那也就有了路由中間件。

如果同一個請求,所有類型的中間件都定義了,那執行順序是如何呢?

全局中間件->應用中間件->路由中間件->控制器中間件

接下來我們看一個實例。

全局中間件:

?public?function?handle($request,?Closure?$next) ????{ ????????echo?'app全局中間件'; ????????return?$next($request); ????}

應用中間件:

public?function?handle($request,?Closure?$next) ????{ ????????echo?'應用中間件'; ????????return?$next($request); ????}

路由中間件:

Route::rule('hello','index/hello') ->middleware(appmiddlewareAuth::class);

控制器中間件:

在使用控制器中間件之前,我們先定義好別名,在根目錄下configmiddleware.php中定義別名。這個別名其實就是增加別名標識。別名定義好后,不僅在控制器中間件可以使用,路由中間件也可以使用。

return?[ ????'alias'?=>?[ ????????'auth1'?=>?appmiddlewareAuth1::class, ????], ];

我們在這里定義別名中間件,就不需要在middleware.php中聲明了,而是通過在控制中使用別名定義:

class?Index { ????protected?$middleware?=?['auth1']; ????public?function?index() ????{ ???????return?'index'; ????} ????public?function?hello() ????{ ???????echo?'hello方法'; ????} }

這個時候我們訪問hello方法,輸出結果是:

app全局中間件

應用中間件

路由中間件

控制器中間件

hello方法

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享