Thinkphp6專案基本操作(中介軟體處理登入流程)

語言: CN / TW / HK

點選進入“PHP開源社群”    

免費獲取進階面試、文件、影片資源

一、定義中介軟體

<?php



namespace app\middleware;



class Check

{

public function handle($request, \Closure $next)

{

if ($request->param('name') == 'think') {

return redirect('index/think');

}



return $next($request);

}

}

中介軟體類可以隨意命名,中介軟體的入口執行方法必須是 handle 方法,而且第一個引數是 Request 物件,第二個引數是一個 閉包

二、前置/後置中介軟體

中介軟體是在請求具體的操作之前還是之後執行,完全取決於中介軟體的定義本身。

下面是一個前置行為的中介軟體:

<?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;

}

}

三、註冊中介軟體

中介軟體分為 全域性中介軟體應用中介軟體(多應用模式下有效)路由中介軟體 以及 控制器中介軟體 四個組。執行順序分別為:

全域性中介軟體->應用中介軟體->路由中介軟體->控制器中介軟體

1. 全域性中介軟體

全域性中介軟體在 app 目錄下面 middleware.php 檔案中定義,使用下面的方式:

<?php



return [

\app\middleware\Auth::class

];

中介軟體的註冊應該使用完整的類名,如果已經定義了中介軟體別名(或者分組)則可以直接使用。全域性中介軟體的執行順序就是定義順序。

2. 應用中介軟體

如果你使用了多應用模式,則支援應用中介軟體定義,你可以直接在應用目錄下面增加 middleware.php 檔案,定義方式和全域性中介軟體定義一樣,只是只會在該應用下面生效。

3. 路由中介軟體

最常用的中介軟體註冊方式是註冊路由中介軟體:

Route::rule('hello/:name','hello')->middleware(\app\middleware\Auth::class);

支援註冊多箇中間件:

Route::rule('hello/:name','hello')->middleware([\app\middleware\Auth::class, \app\middleware\Check::class]);

4. 控制器中介軟體

支援為控制器定義中介軟體,只需要在控制器中定義 middleware 屬性,例如:

<?php

namespace app\controller;



class Index

{

protected $middleware = ['auth'];



public function index()

{

return 'index';

}



public function hello()

{

return 'hello';

}

}

當執行index控制器的時候就會呼叫 auth 中介軟體,一樣支援使用完整的名稱空間定義。

5. 內建中介軟體

這些內建中介軟體預設都沒有定義,你可以在應用的 middleware.php 檔案中、路由或者控制器中定義這些中介軟體,如果不需要使用的話,取消定義即可。

四、中介軟體使用 – 後臺登入頁面跳轉流程

當訪問後臺主頁的時候,如果已經登入(已記錄session)則可以進入注意,否則返回登入頁面;若訪問後臺登入頁面,如果已經登入(已記錄session)則直接跳轉到主頁,否則進入登入頁面。

1. 建立Auth中介軟體

admin 應用資料夾建立 middleware 資料夾,建立 Auth.php 中介軟體檔案:

<?php



namespace app\admin\middleware;

use think\Response;



class Auth

{

public function handle($request, \Closure $next){

// 前置中介軟體

if(empty(session(config("admin.session_admin"))) && !preg_match("/login/",$request->pathinfo()) ){

return redirect(url('login/index'));

}

if(!empty(session(config("admin.session_admin"))) && preg_match("/login\/index/",$request->pathinfo())){

return redirect(url('index/index'));

}



$response = $next($request);

// 後置中介軟體

return $response;

}



public function end(Response $response){



}

}

admin.session_admin 是在admin/config資料夾下配置檔案定義的:

admin/config/admin.php

<?php

return [

'session_admin' => 'adminUser'

];

2. 註冊應用中介軟體

admin 應用目錄新建 middleware.php

<?php

return [

\think\middleware\SessionInit::class,

app\admin\middleware\Auth::class

];

*宣告:本文於網路整理,版權歸原作者所有,如來源資訊有誤或侵犯權益,請聯絡我們刪除或授權事宜

END

PHP開源社群

掃描關注  進入”PHP資料“

免費獲取進階

面試、文件、影片資源

點選“檢視原文”獲取更多