ThinkPHP 中介軟體
中介軟體主要用於攔截或過濾應用的HTTP請求,並進行必要的業務處理,在TP中主要分為:路由中介軟體,控制器中介軟體,全域性中介軟體,模組中介軟體等。但其中需要注意的點是中介軟體handle方法的返回值必須是一個Response物件,在某些需求下,可以使用handle方法的第三個引數傳入額外的引數。當然也可以給中介軟體起別名(路由中介軟體和控制器中介軟體會用的到)。
下面我以跨域中介軟體為例
定義中介軟體
定義CrossDomain.php
<?php
namespace app\http\middleware;
use app\common\exception\ParamException;
use think\facade\Config;
use think\Request;
class CrossDomain
{
/**
* @param Request $request
* @param \Closure $next
* @return mixed|\think\Response
* @throws ParamException
*/
public function handle(Request $request, \Closure $next)
{
$origin = $request->header('origin');
$origin = $origin ? $origin : $request->domain();
$whiteList = Config::get('cross_domain.whiteList',[]);
if ( ! in_array($origin, $whiteList) ) {
throw new ParamException(['errMsg'=>'跨域請求不在白名單中']);
}
header('Access-Control-Allow-Origin:'.$origin);
header('Access-Control-Max-Age:3600');
header('Access-Control-Allow-Methods:GET, POST, OPTIONS');
header('Access-Control-Allow-Headers:X-Requested-With, Content-Type, Accept, Origin, Authorization, X-TOKEN');
if (strtoupper($request->method()) == "OPTIONS") {
return response()->header('Content-Length',0);
}
return $next($request);
}
}
註冊中介軟體
中介軟體的註冊應該使用完整的類名,如果沒有指定名稱空間則使用app\http\middleware
作為名稱空間,跨域中介軟體屬於全域性中介軟體,故在專案應用目錄下建立middleware.php
檔案進行註冊。
return [
\app\http\middleware\CrossDomain::class,
];
路由中介軟體,控制器中介軟體和模組中介軟體在此就不解釋了,具體的可以檢視官方手冊。