thinkphp6应用中间件及全局中间件的用法示例

知识技术 2022-10-22 21:44 905
转载请务必注明: 来源:《建站管家》https://www.df81.com/news/465.html

一、thinkphp6全局中间件的用法示例:
1、创建全局中间件文件:app\middleware\CheckLogin.php

<?php
namespace app\middleware;

class CheckLogin{
    public function handle($request, \Closure $next) {
    	$module = app('http')->getName();
        /*判断用户是否登陆*/
        if(in_array($module, array('admin')) and empty(session('userid'))){
	    return '请登录';
	}
        
        return $next($request);
    }
}


2、启用全局中间文件:app\middleware.php

<?php
// 全局中间件定义文件
return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // Session初始化
    \think\middleware\SessionInit::class,
    // 启用全局中间件
    \app\middleware\CheckLogin::class
];


3、创建公共控制器:app\cn\controller\Base.php

<?php
namespace app\cn\controller;
use app\BaseController;

class Base extends BaseController{
    protected $middleware = [
        'auth' => ['only' => ['user/index'] ], // 只有在user/index控制器方法下启用中间件
    ];    
}


4、创建会员中心和登录页面:app\cn\controller\User.php

<?php
namespace app\cn\controller;

class User extends Base{    
    public function index(){
        return '会员中心';
    }

    public function login(){
        return '登录页面';
    }
}



二、thinkphp6应用中间件的用法示例:
1、创建应用中间件文件:app\cn\middleware\CheckLogin.php

<?php
namespace app\cn\middleware;

class CheckLogin{
    public function handle($request, \Closure $next) {
    	if(empty(session('userid'))){
    	    return '请登录';
    	}
        
        return $next($request);
    }
}


2、创建路由文件:app\cn\route\route.php

<?php
use think\facade\Route;

Route::group(function () {
        Route::rule('user/index','user/index');//只有该控制器和方法下启用中间件
})->middleware(\app\cn\middleware\CheckLogin::class);


3、创建会员中心页面和登录页面文件:app\cn\controller\User.php

<?php
namespace app\cn\controller;

class User{
    public function index(){
    	return '会员中心';
    }

    public function login(){
    	return '登录页面';
    }
}


我的做法:
一、新建全局中间件:app\middleware\All.php

<?php
namespace app\middleware;

class All{
    public function handle($request, \Closure $next) {    	
    	if(empty(session('userid'))){
    	    return redirect(url('user/login'));
    	}
        
        return $next($request);
    }
}


二、应用的路由启用中间件:app\cn\route\route.php

<?php
// 路由启用中间件
Route::group(function(){
	Route::rule('user/index','user/index');
})->middleware(\app\middleware\All::class);


三、新建控制器文件:app\cn\controller\User.php

<?php
namespace app\cn\controller;

class User{
    /*会员中心*/
    public function index(){
    	return 'index';
    }

    /*登录页面*/
    public function login(){
    	return 'login';
    }
}



点赞 (0)

收藏 (0)

本站部分信息来源网络,如有侵权,请联系QQ:1062129401删除。

上一篇: 《建站管家》二次开发文档

下一篇: uniapp封装函数,调用函数,最简单、最好理解的方法

请先登录后,再发表评论 ~ ~
发表评论
发表评论
发表帖子
广告位招租( ¥5 / 天 )
点击咨询
相关帖子

如果要判断文件是否存在,用函数 is_file(),如果要判断目录是否存在,用函数 is_dir()
用宝塔安装TP程序后,网站前台可以访问,后台无法访问,不是程序问题,而是web服务器环境配置问题(PHP配置),出现这种问题,一般是windows主机安装宝塔造成的,linux安装宝塔不会出现此错误
广告位招租( ¥3 / 天 )
点击咨询
广告位招租( ¥2 / 天 )
点击咨询
广告位招租( ¥1 / 天 )
点击咨询
最新帖子

小朋友,你爸爸是谁啊?这很单纯的,就像我们碰到别人会问:你吃过饭了吗?类似;许多人初次相识,经常会问:你是做什么的啊?你做什么,好像决定你收入的高低,你,资产的范围
1、升级框架到ThinkPHP8.0.3【要求PHP8.1+环境,推荐PHP8.1】 2、启用/禁用调试模式等小细节改进
后台点击生成站点地图 一直转圈圈没有反应,
在线客服