返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >ThinkPHP6.0前置、后置中间件区别
  • 868
分享到

ThinkPHP6.0前置、后置中间件区别

ThinkPHP前置中间件ThinkPHP后置中间件 2021-11-08 12:11:00 868人浏览
摘要

目录1. 创建中间件2. 注册中间件3. 前置、后置中间件4. 前置、后置中间件的区别5. 后置中间件登录拦截器(不推荐)6. 前置中间件登录拦截器(推荐使用)1. 创建中间件命令行创建中间件类文件示例// app\middleware\Authphp thi

目录
  • 1. 创建中间件
  • 2. 注册中间件
  • 3. 前置、后置中间件
  • 4. 前置、后置中间件的区别
  • 5. 后置中间件登录拦截器(不推荐)
  • 6. 前置中间件登录拦截器(推荐使用)

1. 创建中间件

命令行创建中间件类文件示例


// app\middleware\Auth
PHP think make:middleware Auth

// app\middleware\admin\Auth
php think make:middleware admin/Auth

// app\admin\middleware\Auth
php think make:middleware admin@Auth

// pp\admin\middleware\login\Auth
php think make:middleware admin@login/Auth

本文使用的是


php think make:middleware admin@Auth

2. 注册中间件

创建中间件类文件后,就可以根据应用场景去注册中间件了

注册中间件分为四种类型: 全局中间件、应用中间件、路由中间件、控制器中间件

本文以最常见的场景为例: 将应用中间件作为登录流拦截器, 来说明前置中间件和后置中间件的区别

3. 前置、后置中间件

一个中间件是前置中间件还是后置中间件,看的是中间件执行代码在请求之前执行还是请求之后执行

请求指的是 $next($request),中间件执行代码在请求之前执行称为前置中间件,在请求之后执行称为后置中间件

前置中间件: 中间件执行代码在 $next($request) 前面执行,如下图所示

后置中间件: 中间件执行代码在 $next($request) 后面执行,如下图所示

4. 前置、后置中间件的区别

区别一: 在前置中间件中使用 $request->controller() 获取不到访问的控制器名,而在后置中间件中则可以正常获取到

在前置中间件打印 $request 发现是获取不到访问的控制器和方法名

在后置中间件打印 $request 可以获取到访问的控制器和方法名

区别二: 前置中间件没有执行控制器中的代码,而后置中间件则执行了

后置中间件存在的问题: 虽然能拦截,但是控制器中的代码已经执行了,因为调用 $next($request), 相当于执行控制器方法

如下图所示,在控制器方法中往文件中写入了一条数据,使用后置中间件时即使被拦截也会执行文件写入,所以使用后置中间拦截其实没有意义的,我们应该使用前置中间件进行拦截

后置中间件、控制器方法如下图所示

查看网页源代码,页面上输出的值如下所示

middleware start
业务逻辑
middleware ing
方法返回值

而不是

middleware start
middleware ing
业务逻辑
方法返回值

5. 后置中间件登录拦截器(不推荐)


public function handle($request, \Closure $next)
{
    $response = $next($request);
    $noCheck = ['login']; // 不做登陆校验的控制器
    $controller = parse_name($request->controller());
    if (!session('?admin') && !in_array($controller, $noCheck)) {
        return redirect(url('admin/login'));
    }
    return $response;
}

6. 前置中间件登录拦截器(推荐使用)

在前置中间件中无法使用 $request->controller() 获取控制器名,但可以使用 $request->pathinfo() 获取当前路由地址


public function handle($request, \Closure $next)
{
    if (empty(session('admin')) && !preg_match('/login/', $request->pathinfo())) {
        return redirect((string)url('login/index'));
    }
    return $next($request);
}

到此这篇关于ThinkPHP6.0前置、后置中间件区别的文章就介绍到这了,更多相关ThinkPHP6.0前置后置中间件内容请搜索编程界以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程界!

--结束END--

本文标题: ThinkPHP6.0前置、后置中间件区别

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

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

猜你喜欢
  • FastAPI--中间件(6)
    所谓的中间件,其实和我们bottle中的中间件作用是一致。有些方法或操作需要在所有路由之前执行,比如要加一个http访问的拦截器,可以对部分接口API需要授权才能访问的接口进行验证之类的。FastAPI提供了一个@app.middlewar ...
    662
    2023-03-22
    中间件 FastAPI
  • Django 中间件
    目录一.中间件二.中间件用途三.中间件方法四.自定义中间件process_viewprocess_exception ...
    202
    2023-03-22
    中间件 Django
  • Express框架两个内置中间件方法详解
    这篇文章主要为大家介绍了Express框架两个内置中间件方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 ...
    523
    2023-03-22
    Express框架内置中间件 Express框架
  • Django之中间件
    中间件介绍 中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。 但是由于其影响的是全局,所以需要谨慎使用,使用不 ...
    194
    2023-03-22
    中间件 Django
  • django中间件-12
    目录自定义中间件函数定义类定义中间件的执行顺序在django中,中间件其实就是一个类,他是一个可以介入djang ...
    905
    2023-03-22
    中间件 django
  • 如何使用Casbin作为ThinkPHP的权限控制中间件
    本文介绍了如何使用Casbin作为ThinkPHP的权限控制中间件,感兴趣的同学,可以参考下,理解其原理。 ...
    304
    2023-03-22
    thinkphp casbin casbin 中间件
  • ASP.NET Core中间件用法与官方常用中间件介绍
    这篇文章介绍了ASP.NET Core中间件用法与官方常用中间件,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 ...
    587
    2023-03-22
    ASP.NET Core 中间件
  • MySQL 中间件Mycat部署
    什么是MyCat* 一个彻底开源的,面向企业应用开发的大数据库集群* 支持事务、ACID、可以替代MySQL的加强版数据库* 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群* 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型 ...
    433
    2023-03-22
    MySQL 中间件Mycat部署 数据库入门 数据库基础教程 数据库 mysql
  • 如何掌握Mycat中间件
    本篇内容主要讲解“如何掌握Mycat中间件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何掌握Mycat中间件”吧!分布式数据存储与MycatMycat架构介绍Mycat核心概念及配置分布式数 ...
    213
    2023-03-22
    mycat
  • Django中间件的使用
    中间件(middleware)中间件应用于request与服务端之间和服务端与response之间,客户端发起请求到服务端接收可以通过中间件,服务端返回响应与客户端接收响应可以通过中间件,也就是说中间件可以处理request和respons ...
    320
    2023-03-22
    中间件 Django
  • Django 中间件 请求前
    中间件:class TestMiddleware(object):"""中间件类"""def __init__(self):"""服务器重启之后,接收第一个请求时调用"""pass ...
    165
    2023-03-22
    中间件 Django
  • Django——中间件设置缓存
    如图所示查看网站缓存时间在app中创建middleware.py文件,导入MiddlewareMixin,创建类并继承MiddlewareMixin在settings中的MIDDLEWARE=[ ] 注册中间件类;添加一个CACHE_CON ...
    327
    2023-03-22
    缓存 中间件 Django
  • nodejs express实现中间件
    这篇文章主要为大家介绍了nodejs express实现中间件实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 ...
    886
    2023-03-22
    nodejs express中间件 nodejs express
  • ASP.NETCore中间件
    这篇文章介绍了ASP.NETCore的中间件,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 ...
    683
    2023-03-22
    ASP.NET Core 中间件
  • .NET 6中间件Http Logging使用介绍
    这篇文章介绍了.NET 6中间件Http Logging的使用方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 ...
    465
    2023-03-22
    .NET 6 Http Logging Http Logging
  • 浅析node中间件及实现一个简单的node中间件
    这篇文章主要介绍了浅析node中间件及实现一个简单的node中间件,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下 ...
    248
    2023-03-22
    node中间件 实现node中间件
  • Mysql访问中间件--Atlas初探
    Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性,目前该项目在360公司内部得到了广泛应 ...
    359
    2023-03-22
    Mysql访问中间件--Atlas初探
  • express的中间件cookieParser详解
    cookieParser中间件用于获取web浏览器发送的cookie中的内容.在使用了cookieParser中间件后,代表客户端请求的htto.IncomingMessage对象就具有了一个cookies属性,该属性之为一个对象的数组, ...
    930
    2023-03-22
    详解 中间件 express
  • express的中间件bodyParser详解
    bodyParser用于解析客户端请求的body中的内容,内部使用JSON编码处理,url编码处理以及对于文件的上传处理.下面是一个文件上传的例子.建立一个1.html页面!DOCTYPE html>html>head lang= ...
    825
    2023-03-22
    详解 中间件 express
  • express的中间件basicAuth详解
    basicAuth中间件为网站添加身份认证功能.在使用了该中间件后,用户访问网站时必须输入用户名与密码,在用户输入了用户名与密码并通过验证之后才能访问网站.当用户输入的用户名和密码符合条件,中间件会返回true,允许用户访问网站.否则会 ...
    695
    2023-03-22
    详解 中间件 express
热门问答
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作