Thinkphp 6 0中介軟體使用詳解

2021-10-06 12:27:55 字數 2862 閱讀 2510

6.0中介軟體分為系統中介軟體和應用中介軟體,系統中介軟體為核心框架內建的中介軟體,應用中介軟體是在應用裡面建立的中介軟體。

中介軟體的主要應用場景可以包括對http請求的資料過濾、許可權檢測、請求攔截等行為,使用中介軟體能夠讓控制器的定義更加簡單,很多額外的非核心業務流程的處理都可以交給中介軟體執行。

從中介軟體的使用範圍來看,可以分為全域性中介軟體、應用中介軟體、控制器中介軟體和路由中介軟體。

return [

// 全域性請求快取

// 'think\middleware\checkrequestcache',

// 多語言載入

// 'think\middleware\loadlangpack',

// session初始化

// 'think\middleware\sessioninit',

// 頁面trace除錯

// 'think\middleware\tracedebug',

];

系統的部分功能交給中介軟體進行統一管理,包括全域性請求快取、多語言的自動檢測和載入、session初始化和頁面trace除錯,也就是說,預設安裝後的應用是不支援session的,你必須全域性開啟session初始化中介軟體後session才能生效。對於api應用來說,本身就不需要session功能支援。

你可以在全域性中介軟體定義檔案中新增你的應用中介軟體,但盡可能確保系統中介軟體的優先執行,中介軟體定義需要使用完整的類名,通過命令列指令可以快速建立乙個應用中介軟體:

php think make:middleware test
<?php

class test

}

也支援通過指定完整命名空間的方式建立中介軟體類

我們新增乙個測試輸出

<?php

class test

}

中介軟體handle方法的返回值必須是乙個response物件。

然後在全域性中介軟體定義中新增

return [

];

假設我們要訪問的控制器方法為

<?php

class index

}

訪問該操作方法的輸出為

before middleware

hello,thinkphp!

after middleware

你可以看出中介軟體的執行過程,從執行流程上可以分為前置中介軟體和後置中介軟體,當然,乙個中介軟體可能同時有前置和後置行為,上面的test中介軟體就是如此。 $next($request)之前的**屬於前置中介軟體範疇,之後的**則屬於後置中介軟體範疇。

路由中介軟體則表示僅在路由匹配之後才會執行某個中介軟體,在路由定義中使用middleware方法定義,例如:

route::get('hello/:name','index/hello')
可以給路由分組定義中介軟體

route::group(function())->middleware(['hello','check']);
支援給一組中介軟體定義別名

return [

];

路由定義可以改為

route::group(function())->middleware('test');
中介軟體支援傳入乙個引數,中介軟體定義如下

<?php

class hello

}

可以在路由中介軟體的第二個引數傳入name引數

route::get('hello/:name','index/hello')

->middleware('hello', 'middleware');

除了支援引數外,你可以在中介軟體的handle方法中使用依賴注入。

控制器中介軟體僅當訪問某個控制器的時候生效

<?php

class hello

}

由於前面已經定義了中介軟體別名,所以這裡直接使用別名定義,否則你必須使用完整的命名空間定義。

預設情況下,控制器中定義的中介軟體訪問控制器的任何操作方法都會執行,有時候並不希望所有的操作都需要執行中介軟體,有兩種方式來定義控制器中介軟體的執行過濾。

<?php

class index

public function check()

}

hello中介軟體僅在執行index控制器的hello操作的時候才會執行,而check中介軟體除了hello方法外,都會執行,具體效果你可以實際測試下。

中介軟體和控制器之間傳參的方式有很多,乙個簡單的方法是使用request來進行傳參。

<?php

class hello

}

中介軟體向控制器傳參必須在前置中介軟體完成,後置中介軟體向控制器的傳參控制器無法接收。

然後在控制器的方法裡面可以直接使用

public function index(request $request)

thinkphp5 1中介軟體

class check return next request 中介軟體的入口執行方法必須是 handle 方法,而且第乙個引數是 request 物件,第二個引數是乙個閉包,在一些情況下允許有第三個引數 在路由中直接註冊中介軟體 route get hello name index hello m...

Thinkphp5高階 05 中介軟體

中介軟體主要用於攔截或過濾應用的http請求,並進行必要的業務處理。中介軟體應該拿來做些什麼事情 例如許可權驗證,訪問記錄,重定向等等。namespace class firsttest return next request 1 路由使用中介軟體 使用鏈式方法middleware 中介軟體名 ro...

13 2 7 中介軟體

中介軟體顧名思義,是介於request與response處理之間的一道處理過程,相對比較輕量級,並且在全域性上改變django的輸入與輸出。因為改變的是全域性,所以需要謹慎實用,用不好會影響到效能。如果你想修改請求,例如被傳送到view中的httprequest物件。或者你想修改view返回的htt...