广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >Thinkphp6.0中间件怎么用
  • 756
分享到

Thinkphp6.0中间件怎么用

2023-06-21 23:06:45 756人浏览 安东尼
摘要

这篇文章主要介绍ThinkPHP6.0中间件怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!0中间件分为系统中间件和应用中间件,系统中间件为核心框架内置的中间件,应用中间件是在应用里面创建的中间件。中间件的主要应

这篇文章主要介绍ThinkPHP6.0中间件怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

0中间件分为系统中间件和应用中间件,系统中间件为核心框架内置的中间件,应用中间件是在应用里面创建的中间件。

中间件的主要应用场景可以包括对Http请求的数据过滤、权限检测、请求拦截等行为,使用中间件能够让控制器的定义更加简单,很多额外的非核心业务流程的处理都可以交给中间件执行。

从中间件的使用范围来看,可以分为全局中间件、应用中间件、控制器中间件和路由中间件。

全局中间件

全局中间件是在app\middleware.php中定义的中间件,默认没有启用任何中间件,但对支持的系统中间件做了注释,你只需要取消注释就可以使用相应的系统中间件,默认内容如下:

return [    // 全局请求缓存    // 'think\middleware\CheckRequestCache',    // 多语言加载    // 'think\middleware\LoadLangPack',    // Session初始化    // 'think\middleware\SessionInit',    // 页面Trace调试    // 'think\middleware\TraceDebug',];

系统的部分功能交给中间件进行统一管理,包括全局请求缓存、多语言的自动检测和加载、Session初始化和页面Trace调试,也就是说,默认安装后的应用是不支持Session的,你必须全局开启Session初始化中间件后Session才能生效。对于api应用来说,本身就不需要Session功能支持。

你可以在全局中间件定义文件中添加你的应用中间件,但尽可能确保系统中间件的优先执行,中间件定义需要使用完整的类名,通过命令行指令可以快速创建一个应用中间件:

php think make:middleware Test

会自动生成一个app\middleware\Test中间件类,内容如下:

<?php namespace app\middleware; class Test{    public function handle($request, \Closure $next)    {    }}

也支持通过指定完整命名空间的方式创建中间件类

php think make:middleware app\middleware\Hello

我们添加一个测试输出

<?php namespace app\middleware; class Test{    public function handle($request, \Closure $next)    {     echo 'Before Middleware<br/>';     $response = $next($request);     echo 'After Middleware<br/>';     return $response;    }}

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

然后在全局中间件定义中添加

return [ \app\middleware\Test::class,];

假设我们要访问的控制器方法为

<?php namespace app\controller; class Index{    public function hello()    {     return 'Hello,ThinkPHP!<br/>';    }}

访问该操作方法的输出为

Before Middleware
Hello,ThinkPHP!
After Middleware

你可以看出中间件的执行过程,从执行流程上可以分为前置中间件和后置中间件,当然,一个中间件可能同时有前置和后置行为,上面的Test中间件就是如此。 $next($request)之前的代码属于前置中间件范畴,之后的代码则属于后置中间件范畴。

应用中间件

如果是多应用模式的话,应用中间件就是在app\应用名\middleware.php中定义的中间件,只会在该应用下有效,定义格式和全局中间件一致。

路由中间件

路由中间件则表示仅在路由匹配之后才会执行某个中间件,在路由定义中使用middleware方法定义,例如:

Route::get('hello/:name','index/hello')    ->middleware(\app\middleware\Hello::class);

可以给路由分组定义中间件

Route::group(function(){ Route::get('hello/:name','index/hello'); //...})->middleware(\app\middleware\Hello::class);

如果要执行多个中间件,可以使用

Route::group(function(){ Route::get('hello/:name','index/hello'); //...})->middleware([\app\middleware\Hello::class,\app\middleware\Check::class]);

对于经常要使用的中间件,我们可以定义一个别名,在config\middleware.php配置文件中,设置

return [ 'hello' => \app\middleware\Hello::class, 'check' => \app\middleware\Check::class,];

路由定义可以改为:

Route::group(function(){ Route::get('hello/:name','index/hello'); //...})->middleware(['hello','check']);

支持给一组中间件定义别名

return [ 'test' => [\app\middleware\Hello::class,\app\middleware\Check::class],];

路由定义可以改为

Route::group(function(){ Route::get('hello/:name','index/hello'); //...})->middleware('test');

中间件支持传入一个参数,中间件定义如下

<?php namespace app\middleware; class Hello{    public function handle($request, \Closure $next, string $name = '')    {     echo 'Hello'. $name . '<br/>';     return $next($request);    }}

可以在路由中间件的第二个参数传入name参数

Route::get('hello/:name','index/hello')    ->middleware('hello', 'middleware');

除了支持参数外,你可以在中间件的handle方法中使用依赖注入。

控制器中间件

控制器中间件仅当访问某个控制器的时候生效

<?php namespace app\controller; class Hello{ protected $middleware = ['hello','check'];     public function index()    {     return 'Hello,ThinkPHP!<br/>';    }}

由于前面已经定义了中间件别名,所以这里直接使用别名定义,否则你必须使用完整的命名空间定义。

默认情况下,控制器中定义的中间件访问控制器的任何操作方法都会执行,有时候并不希望所有的操作都需要执行中间件,有两种方式来定义控制器中间件的执行过滤。

<?php namespace app\controller; class Index{ protected $middleware = [  'hello' => ['only'  => ['hello']],  'check' => ['except'=> ['hello']], ];     public function hello()    {     return 'Hello,ThinkPHP!<br/>';    }     public function check()    {     return 'this action require check!<br/>';    }    }

hello中间件仅在执行Index控制器的hello操作的时候才会执行,而check中间件除了hello方法外,都会执行,具体效果你可以实际测试下。

中间件传参

中间件和控制器之间传参的方式有很多,一个简单的方法是使用Request来进行传参。

<?php namespace app\middleware; class Hello{    public function handle($request, \Closure $next)    {        $request->hello = 'ThinkPHP';                return $next($request);    }}

中间件向控制器传参必须在前置中间件完成,后置中间件向控制器的传参控制器无法接收。

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

public function index(Request $request){ return $request->hello; // ThinkPHP}

以上是“Thinkphp6.0中间件怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网PHP编程频道!

--结束END--

本文标题: Thinkphp6.0中间件怎么用

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

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

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

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

下载Word文档
猜你喜欢
  • Thinkphp6.0中间件怎么用
    这篇文章主要介绍Thinkphp6.0中间件怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!0中间件分为系统中间件和应用中间件,系统中间件为核心框架内置的中间件,应用中间件是在应用里面创建的中间件。中间件的主要应...
    99+
    2023-06-21
  • Thinkphp6.0中间件的具体使用
    目录全局中间件应用中间件路由中间件控制器中间件中间件传参0中间件分为系统中间件和应用中间件,系统中间件为核心框架内置的中间件,应用中间件是在应用里面创建的中间件。 中间件的主要应用场景可以包括对HTTP请求的数据过滤、权限检测、请求拦截等行...
    99+
    2021-01-07
    Thinkphp6.0中间件 Thinkphp 中间件
  • ThinkPHP6.0前置、后置中间件区别
    目录1. 创建中间件2. 注册中间件3. 前置、后置中间件4. 前置、后置中间件的区别5. 后置中间件登录拦截器(不推荐)6. 前置中间件登录拦截器(推荐使用)1. 创建中间件 命令行创建中间件类文件示例 // app\middlewa...
    99+
    2021-11-08
    ThinkPHP前置中间件 ThinkPHP后置中间件
  • Thinkphp5.1中间件怎么用
    本篇内容介绍了“Thinkphp5.1中间件怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、中间件的作用中间件主要用于拦截或过滤应用...
    99+
    2023-06-30
  • mysql中间件mycat怎么用
    这篇文章将为大家详细讲解有关mysql中间件mycat怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一,什么是mycat一个彻底开源的,面向企业应用开发的大数据库集...
    99+
    2022-10-18
  • laravel的中间件middleware怎么用
    这篇文章将为大家详细讲解有关laravel的中间件middleware怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。中间件可以对请求进行过滤,这里可以利用中间件来验证用户是否登录,如果用户登录则可以...
    99+
    2023-06-21
  • Node.js怎么使用Middleware中间件
    今天小编给大家分享一下Node.js怎么使用Middleware中间件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。中间件中...
    99+
    2023-07-06
  • Koa框架中间件怎么用
    这篇文章主要介绍了Koa框架中间件怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Node 主要用在开发 Web 应用,koa 是目前 ...
    99+
    2022-10-19
  • thinkphp的中间件怎么使用
    今天小编给大家分享一下thinkphp的中间件怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在thinkphp中,在...
    99+
    2023-06-29
  • laravel8怎么使用throttle中间件
    本篇内容主要讲解“laravel8怎么使用throttle中间件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“laravel8怎么使用throttle中间件”吧!laravle8 访问限制 th...
    99+
    2023-07-04
  • java中间件技术怎么使用
    Java中间件技术是一种用于帮助开发人员构建分布式应用程序的工具。它们提供了一系列功能和工具,用于处理分布式系统中的通信、事务、负载...
    99+
    2023-10-25
    java
  • laravel怎么创建中间件
    这篇文章主要介绍了laravel怎么创建中间件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Laravel 中间件提供了一种机制在不修改逻辑代码的情况下,中断原本程序流程,通...
    99+
    2023-06-15
  • gitee怎么部署中间件
    随着互联网的快速发展,各种技术也不断涌现。中间件作为一种重要的技术,在互联网开发中扮演着重要的角色。而如今,中间件已经被广泛使用,成为了开发人员必不可少的技术之一。在本文中,我们将探讨如何在gitee上部署中间件。首先,我们需要了解什么是中...
    99+
    2023-10-22
  • Java中间件怎么配置
    配置Java中间件通常包括以下几个步骤: 下载并安装中间件:根据需要选择合适的中间件,比如Apache Tomcat、JBoss...
    99+
    2023-10-25
    Java
  • vue+webpack+express中间件接口怎么用
    这篇文章主要介绍vue+webpack+express中间件接口怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!环境:vue 2.9.3; webpack目的:接口的调用跨域方式...
    99+
    2022-10-19
  • .NET 6中间件Http Logging怎么使用
    这篇文章主要介绍“.NET 6中间件Http Logging怎么使用”,在日常操作中,相信很多人在.NET 6中间件Http Logging怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
    99+
    2023-06-22
  • MySQL中间件是怎么样的
    MySQL中间件是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 首先数据库技术发展的基础还是在业务推动的背景下,能够实现相关的技术...
    99+
    2022-10-19
  • node的中间件怎么实现
    这篇文章主要介绍“node的中间件怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“node的中间件怎么实现”文章能帮助大家解决问题。 ...
    99+
    2022-10-19
  • laravel中间件怎么自定义
    今天小编给大家分享一下laravel中间件怎么自定义的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是中间件中间件为过滤进...
    99+
    2023-06-30
  • redis怎么做消息中间件
    Redis可以用作消息中间件,可以通过以下步骤来实现:1. 安装和启动Redis:首先,您需要在您的服务器上安装和启动Redis实例...
    99+
    2023-09-04
    redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作