ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)
中間件處理登錄流程
- 一、定義中間件
- 二、前置/后置中間件
- 三、注冊(cè)中間件
- 1. 全局中間件
- 2. 應(yīng)用中間件
- 3. 路由中間件
- 4. 控制器中間件
- 5. 內(nèi)置中間件
- 四、中間件使用 -- 后臺(tái)登錄頁(yè)面跳轉(zhuǎn)流程
- 1. 創(chuàng)建Auth中間件
- 2. 注冊(cè)應(yīng)用中間件
一、定義中間件
<?phpnamespace app\middleware;class Check {public function handle($request, \Closure $next){if ($request->param('name') == 'think') {return redirect('index/think');}return $next($request);} }中間件類可以隨意命名,中間件的入口執(zhí)行方法必須是handle方法,而且第一個(gè)參數(shù)是Request對(duì)象,第二個(gè)參數(shù)是一個(gè)閉包。
二、前置/后置中間件
中間件是在請(qǐng)求具體的操作之前還是之后執(zhí)行,完全取決于中間件的定義本身。
下面是一個(gè)前置行為的中間件:
下面是一個(gè)后置行為的中間件:
<?phpnamespace app\middleware;class After {public function handle($request, \Closure $next){$response = $next($request);// 添加中間件執(zhí)行代碼return $response;} }三、注冊(cè)中間件
新版的中間件分為全局中間件、應(yīng)用中間件(多應(yīng)用模式下有效)、路由中間件以及控制器中間件四個(gè)組。執(zhí)行順序分別為:
全局中間件->應(yīng)用中間件->路由中間件->控制器中間件
1. 全局中間件
全局中間件在app目錄下面middleware.php文件中定義,使用下面的方式:
<?phpreturn [\app\middleware\Auth::class ];中間件的注冊(cè)應(yīng)該使用完整的類名,如果已經(jīng)定義了中間件別名(或者分組)則可以直接使用。全局中間件的執(zhí)行順序就是定義順序。
2. 應(yīng)用中間件
如果你使用了多應(yīng)用模式,則支持應(yīng)用中間件定義,你可以直接在應(yīng)用目錄下面增加middleware.php文件,定義方式和全局中間件定義一樣,只是只會(huì)在該應(yīng)用下面生效。
3. 路由中間件
最常用的中間件注冊(cè)方式是注冊(cè)路由中間件:
Route::rule('hello/:name','hello')->middleware(\app\middleware\Auth::class);支持注冊(cè)多個(gè)中間件:
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';} }當(dāng)執(zhí)行index控制器的時(shí)候就會(huì)調(diào)用auth中間件,一樣支持使用完整的命名空間定義。
5. 內(nèi)置中間件
| think\middleware\AllowCrossDomain | 跨域請(qǐng)求支持 |
| think\middleware\CheckRequestCache | 請(qǐng)求緩存 |
| think\middleware\LoadLangPack | 多語(yǔ)言加載 |
| think\middleware\SessionInit Session | 初始化 |
| think\middleware\FormTokenCheck | 表單令牌 |
這些內(nèi)置中間件默認(rèn)都沒(méi)有定義,你可以在應(yīng)用的middleware.php文件中、路由或者控制器中定義這些中間件,如果不需要使用的話,取消定義即可。
四、中間件使用 – 后臺(tái)登錄頁(yè)面跳轉(zhuǎn)流程
當(dāng)訪問(wèn)后臺(tái)主頁(yè)的時(shí)候,如果已經(jīng)登錄(已記錄session)則可以進(jìn)入注意,否則返回登錄頁(yè)面;若訪問(wèn)后臺(tái)登錄頁(yè)面,如果已經(jīng)登錄(已記錄session)則直接跳轉(zhuǎn)到主頁(yè),否則進(jìn)入登錄頁(yè)面。
1. 創(chuàng)建Auth中間件
在admin應(yīng)用文件夾創(chuàng)建middleware文件夾,創(chuàng)建Auth.php中間件文件:
<?phpnamespace 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
2. 注冊(cè)應(yīng)用中間件
在admin應(yīng)用目錄新建middleware.php:
<?php return [\think\middleware\SessionInit::class,app\admin\middleware\Auth::class ];??重磅推薦:免費(fèi)商用電商系統(tǒng)
😏想白嫖整個(gè)電商系統(tǒng)用來(lái)商用?
🤑想有自己的商城實(shí)現(xiàn)財(cái)富自由?
🤓想學(xué)習(xí)最佳實(shí)踐提升自己技術(shù)?
快來(lái)進(jìn)入🚀 傳送門 🚀,開源免費(fèi)、完整示例帶你快速入門,輕松二開,走上人生巔峰!👨?🎓
總結(jié)
以上是生活随笔為你收集整理的ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android 应用专属目录,获取And
- 下一篇: php图片上传不现实路径指向错误,上传图