iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >Thinkphp5.1中间件怎么用
  • 356
分享到

Thinkphp5.1中间件怎么用

2023-06-30 09:06:10 356人浏览 独家记忆
摘要

本篇内容介绍了“ThinkPHP5.1中间件怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、中间件的作用中间件主要用于拦截或过滤应用

本篇内容介绍了“ThinkPHP5.1中间件怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、中间件的作用

中间件主要用于拦截或过滤应用的Http请求,并进行必要的业务处理。比如可以使用中间件来检查用户的请求信息里是否包含一句话木马。

行为钩子和中间件的区别:

中间件:它是对项目请求做处理,在用户访问我们的项目时,中间件就可以对于这个请求来判断用户是否有权限,或者判断用户是否存在非法访问;

行为钩子:在某一动作开始或者结束的时候会触发的方法,比如用户注册成功记录日志

中间件是对用户请求做处理,而钩子则是对用户动作的处理,中间件相当于过滤器,钩子相当于事件,都是采用aop思想。

二、定义中间件

首先,可以通过cmd命令行指令快速生成中间件,在项目的根目录里执行以下cmd命令:

php think make:middleware Check

这个指令会 application/http/middleware目录下面生成一个Check中间件,代码如下:

<?phpnamespace app\http\middleware;class Check{    public function handle($request, \Closure $next)    {        if ($request->param('name') == 'index') {            return redirect('/');//重定向到首页        }        return $next($request);//返回的是一个Response对象    }}

中间件说明:

中间件的入口执行方法必须是handle方法,而且第一个参数是Request对象,第二个参数是一个闭包;

中间件handle方法的返回值必须是一个Response对象;

中间件里可以直接使用Request对象,获取请求参数;

在某些需求下,可以使用第三个参数传入额外的参数;

public function handle($request, \Closure $next, $name){    if ($name == 'index') {        return redirect('/');//重定向到首页    }    return $next($request);}

1、前置中间件

前置中间件的意思就是,在http请求完成之前,先执行中间件的代码。

<?phpnamespace app\http\middleware;class Before{    public function handle($request, \Closure $next)    {        // 先执行中间件代码        return $next($request);    }}

2、后置中间件

后置中间件的意思就是,在http请求完成之后,才开始执行中间件的代码。

<?phpnamespace app\http\middleware;class After{    public function handle($request, \Closure $next)    {$response = $next($request);        //后执行中间件代码        return $response;    }}

三、注册中间件

1、路由中间件

顾名思义,就是指定在某个路由下才会去调用这个中间件,即用户访问了这个路由链接,就会执行这个中间件。

//用户登录的路由Route::rule('login','index/User/login')->middleware('Auth');

或者使用完整的中间件类名:

Route::rule('login','index/User/login')->middleware(app\http\middleware\Auth::class);

说明:中间件的注册建议使用完整的类名,如果没有指定命名空间则默认使用app\http\middleware作为命名空间

同一个路由也支持注册多个中间件,只需要middleware()里用逗号隔开即可:

Route::rule('login','index/User/login')->middleware(['Auth', 'Check']);

Thinkphp5.1.8+ 版本后,支持对路由分组注册中间件,如下:

//一个名为user的路由分组Route::group('user', function(){Route::rule('login','index/User/login');    Route::rule('reGISter','index/User/register');})->middleware('Auth');

2、全局中间件

意思就是说,所有的(全局)http访问请求,都会自动调用这个中间件。

在application目录下创建middleware.php文件,代码如下:

<?phpreturn [    //第1个中间件\app\http\middleware\Auth::class,    //第2个中间件(Check中间件没有指定命名空间,所以会默认使用app\http\middleware作为命名空间)    'Check',];

3、模块中间件

Thinkphp5.1.8+版本以上支持模块中间件定义,你可以直接在模块目录下面增加middleware.php文件,定义方式和全局中间件定义一样,只是只会在该模块下面生效。

4、控制器中间件

Thinkphp5.1.17+版本以上支持为控制器定义中间件。首先你的控制器需要继承系统的think\Controller类,然后在控制器中定义middleware属性,例如:

<?phpnamespace app\index\controller;use think\Controller;class Index extends Controller{    protected $middleware = ['Auth'];    public function index()    {        return 'index';    }}

5、使用闭包定义中间件

在某些简单的场合,我们不需要使用中间件类,这时候可以使用闭包定义中间件,但闭包函数必须返回Response对象实例。

Route::group('hello', function(){Route::rule('login','index/User/login');})->middleware(function($request,\Closure $next){    if ($request->param('name') == 'index') {        return redirect('/');//重定向到首页    }    return $next($request);});

四、给中间件传入参数

1、全局中间件传参数

<?phpreturn [[\app\http\middleware\Auth::class, '张三'],    'Check:李四',];

上面的定义表示给Auth中间件传入参数为张三,给Check中间件传入参数为李四

路由中间件传参数

(1)、给Auth中间件传入参数张三

Route::rule('login','index/User/login')->middleware('Auth:张三');

也可以这样写:

Route::rule('login','index/User/login')->middleware(Auth::class, '张三');

(2)、给多个中间件传入同一个参数

Route::rule('login','index/User/login')->middleware([Auth::class, 'Check'], '张三');

(3)、单独指定各个中间件的参数

Route::rule('login','index/user/login')->middleware(['Auth:张三', 'Check:李四']);

五、中间件向控制器传参数

前面讲的给中间件传入特定的参数 (常量),那么中间要如何向控制器传入参数呢?我们可以通过给Request请求对象赋值的方式传参给控制器(或者其它地方),例如:

<?phpnamespace app\http\middleware;class Auth{    public function handle($request, \Closure $next)    {        //给控制器传参数        $request->result = '验证成功';               return $next($request);    }}

需要特别注意:传递的变量名称不要和Request已有的参数变量名有冲突,比如用户登录请求的Request参数里已经有一个username,那么中间件向控制器传参,就不能再用这个username了,否则会改变原来参数的值。

然后在控制器的方法里面可以直接使用:

public function index(Request $request){return $request->result;}

“Thinkphp5.1中间件怎么用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Thinkphp5.1中间件怎么用

本文链接: https://www.lsjlt.com/news/327960.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Thinkphp5.1中间件怎么用
    本篇内容介绍了“Thinkphp5.1中间件怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、中间件的作用中间件主要用于拦截或过滤应用...
    99+
    2023-06-30
  • ThinkPHP5.1中如何使用时间处理函数
    本篇内容主要讲解“ThinkPHP5.1中如何使用时间处理函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ThinkPHP5.1中如何使用时间处理函数”吧!一、时间戳转换为日期时间在 PHP ...
    99+
    2023-07-06
  • Thinkphp6.0中间件怎么用
    这篇文章主要介绍Thinkphp6.0中间件怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!0中间件分为系统中间件和应用中间件,系统中间件为核心框架内置的中间件,应用中间件是在应用里面创建的中间件。中间件的主要应...
    99+
    2023-06-21
  • 怎么使用thinkphp5.1的数组查询对象
    这篇文章主要介绍怎么使用thinkphp5.1的数组查询对象,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!教你使用5.1的数组查询对象用过5.0的开发者都比较依赖5.0的数组查询方式,但是很无奈5.1的数组查询方式和...
    99+
    2023-06-20
  • mysql中间件mycat怎么用
    这篇文章将为大家详细讲解有关mysql中间件mycat怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一,什么是mycat一个彻底开源的,面向企业应用开发的大数据库集...
    99+
    2024-04-02
  • Thinkphp5.1怎么实现邮箱验证
    本篇内容介绍了“Thinkphp5.1怎么实现邮箱验证”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体问题:比如我想验证这个email是否...
    99+
    2023-06-25
  • thinkphp5.1怎么实现多线程爬虫
    这篇文章主要介绍了thinkphp5.1怎么实现多线程爬虫,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。创建一个cli命令php think make:c...
    99+
    2023-06-25
  • Koa框架中间件怎么用
    这篇文章主要介绍了Koa框架中间件怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Node 主要用在开发 Web 应用,koa 是目前 ...
    99+
    2024-04-02
  • Node.js怎么使用Middleware中间件
    今天小编给大家分享一下Node.js怎么使用Middleware中间件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。中间件中...
    99+
    2023-07-06
  • thinkphp的中间件怎么使用
    今天小编给大家分享一下thinkphp的中间件怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在thinkphp中,在...
    99+
    2023-06-29
  • laravel的中间件middleware怎么用
    这篇文章将为大家详细讲解有关laravel的中间件middleware怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。中间件可以对请求进行过滤,这里可以利用中间件来验证用户是否登录,如果用户登录则可以...
    99+
    2023-06-21
  • laravel8怎么使用throttle中间件
    本篇内容主要讲解“laravel8怎么使用throttle中间件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“laravel8怎么使用throttle中间件”吧!laravle8 访问限制 th...
    99+
    2023-07-04
  • thinkphp5.1中怎么使用自定义异常处理类进行接管
    小编给大家分享一下thinkphp5.1中怎么使用自定义异常处理类进行接管,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!配置文件修改config/app.php自定义异常接管类出处'exception_handle...
    99+
    2023-06-20
  • 怎么用ThinkPhp5.1脚本制作微信支付
    这篇“怎么用ThinkPhp5.1脚本制作微信支付”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用ThinkPhp5.1...
    99+
    2023-06-29
  • java中间件技术怎么使用
    Java中间件技术是一种用于帮助开发人员构建分布式应用程序的工具。它们提供了一系列功能和工具,用于处理分布式系统中的通信、事务、负载...
    99+
    2023-10-25
    java
  • .NET 6中间件Http Logging怎么使用
    这篇文章主要介绍“.NET 6中间件Http Logging怎么使用”,在日常操作中,相信很多人在.NET 6中间件Http Logging怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
    99+
    2023-06-22
  • vue+webpack+express中间件接口怎么用
    这篇文章主要介绍vue+webpack+express中间件接口怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!环境:vue 2.9.3; webpack目的:接口的调用跨域方式...
    99+
    2024-04-02
  • gitee怎么部署中间件
    随着互联网的快速发展,各种技术也不断涌现。中间件作为一种重要的技术,在互联网开发中扮演着重要的角色。而如今,中间件已经被广泛使用,成为了开发人员必不可少的技术之一。在本文中,我们将探讨如何在gitee上部署中间件。首先,我们需要了解什么是中...
    99+
    2023-10-22
  • laravel怎么创建中间件
    这篇文章主要介绍了laravel怎么创建中间件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Laravel 中间件提供了一种机制在不修改逻辑代码的情况下,中断原本程序流程,通...
    99+
    2023-06-15
  • Java中间件怎么配置
    配置Java中间件通常包括以下几个步骤: 下载并安装中间件:根据需要选择合适的中间件,比如Apache Tomcat、JBoss...
    99+
    2023-10-25
    Java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作