首頁 >php框架 >ThinkPHP >說一說ThinkPHP6中五花八門的中間件

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

王雪芹
王雪芹原創
2020-05-06 17:18:082241瀏覽

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

全域中間件:

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

應用中間件:

那換而言之,如果我們複製一份middleware.php放在某個應用程式下,例如index應用,是不是就叫做應用中間件呢,答案是對的。

控制器中間件:

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

路由中間件:

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

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

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

接下來我們來看一個實例。

全域中間件:

 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(\app\middleware\Auth::class);

控制器中間件:

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

return [
    'alias' => [
        'auth1' => app\middleware\Auth1::class,
    ],
];

我們在這裡定義別名中間件,就不需要在middleware.php中宣告了,而是透過在控制中使用別名定義:

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

這時候我們存取hello方法,輸出結果是:

app全域中間件

應用中間件

#路由中間件

控制器中介軟體

hello方法

以上就是ThinkPHP6各種中間件的介紹,其實各種中間件並不難理解,主要在於它們之間的執行順序需要大家明確。

以上是說一說ThinkPHP6中五花八門的中間件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn