首頁 php框架 ThinkPHP ThinkPHP6的前置中間件和後置中間件有哪些差別?

ThinkPHP6的前置中間件和後置中間件有哪些差別?

May 06, 2020 pm 04:12 PM
thinkphp6

在上一個例子中我們學會了定義中間件,也理解了中間件的含義,再向下翻翻手冊,又發現一個叫做“前置中間件”、“後置中間件”,這是什麼情況?兩者又有和差別呢?

一、定義的差別。

從官網手冊不難發現,前置中間件和後置中間件定義就不同,我們看下面。

前置中間件定義:

<?php
namespace app\middleware;
class Before
{
    public function handle($request, \Closure $next)
    {
        // 添加中间件执行代码
        return $next($request);
    }
}
登入後複製

後置中間件:

<?php
namespace app\middleware;
class After
{
    public function handle($request, \Closure $next)
    {
        $response = $next($request);
        // 添加中间件执行代码
        return $response;
    }
}
登入後複製

仔細一看發現,說到底兩者在定義的時候就是執行程式碼和$next ($request)的順序問題,也正是這個順序才是前置中間件與後置中間件的關鍵所在。

二、$request不同。

我們可以分別在前置和後置中間件列印如下程式碼:

halt($request);
登入後複製

我們仔細比較發現,前置中間件中的控制器和方法是空的,後置中間件卻可以得到控制器名稱和方法。所以如果我們想取得目前存取的控制器以及方法,就需要用後置中間件解決。

ThinkPHP6的前置中間件和後置中間件有哪些差別?ThinkPHP6的前置中間件和後置中間件有哪些差別?

三、中間件攔截登入場景。

我們先看下官網關於中間件的定義:

中間件主要用於攔截或過濾應用的HTTP 請求,並進行必要的業務處理。

看到官網的定義,小夥伴可能會想到,用中間件去做登入攔截真的是再好不過的呀。但是用前置還是後置中間件呢?

<?php
namespace app\middleware;
class After
{
    public function handle($request, \Closure $next)
    {
        $response = $next($request);
        // 添加中间件执行代码
        if(empty(&#39;session&#39;)){
            echo &#39;登录不合法&#39;;
            //跳转到登录页面
        }
        return $response;
    }
}
登入後複製

後台首頁:

public function index(){
    echo &#39;后台首页&#39;;
}
登入後複製

執行結果會發現,在登入跳轉前我們依然可以執行到index方法,並且可以把內容輸出。

因此,後置中間件不能使用在登錄場景,前置中間件是攔截登錄最佳的解決方案,這個時候還需要判斷當前訪問是不是登錄,如果是登錄的話,會出現多次重定向,所以這個小夥伴們一定要做好處理。

以上就是前置後置中間件的相關介紹,在實際專案中,根據我們的實際業務邏輯來判斷是用前置還是後置中間件。

以上是ThinkPHP6的前置中間件和後置中間件有哪些差別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)