ThinkPHP6中前置和后置中间件的主要差异是什么?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1137个文字,预计阅读时间需要5分钟。
在上一个例子中,我们学习了定义中间件,并理解了中间件的含义。接着翻看手册,发现有两个概念:前置中间件和后置中间件。这是什么情况?两者有何区别?
一、定义的前置中间件和后置中间件是什么?
1. 前置中间件:在请求处理之前运行的中间件,可以用来修改请求或响应对象。
2. 后置中间件:在请求处理之后运行的中间件,通常用于处理响应。
二、两者有何区别?
1. 运行时机:前置中间件在请求处理之前执行,后置中间件在请求处理之后执行。
2. 功能:前置中间件主要用于处理请求,后置中间件主要用于处理响应。
3. 作用范围:前置中间件可以修改请求或响应对象,后置中间件只能处理响应。
总结:前置中间件和后置中间件是中间件家族中的两个成员,它们在运行时机、功能和作用范围上有所区别。在实际应用中,可以根据需求选择合适的中间件类型。
在上一个例子中我们学会了定义中间件,也理解了中间件的含义,再向下翻翻手册,又发现一个叫做“前置中间件”、“后置中间件”,这是什么情况?两者又有和区别呢?一、定义的区别。
从官网手册中不难发现,前置中间件和后置中间件定义就不同,我们看下面。
前置中间件定义:
<?php namespace app\middleware; class Before { public function handle($request, \Closure $next) { // 添加中间件执行代码 return $next($request); } }
后置中间件:
<?php namespace app\middleware; class After { public function handle($request, \Closure $next) { $response = $next($request); // 添加中间件执行代码 return $response; } }
仔细一看发现,说到底两者在定义的时候就是执行代码和$next($request)的顺序问题,也正是这个顺序才是前置中间件与后置中间件的关键所在。
二、$request不同。
我们可以分别在前置和后置中间件打印如下代码:
halt($request);
我们仔细对比发现,前置中间件中的控制器和方法是空的,后置中间件却可以得到控制器名称和方法。所以如果我们想获取当前访问的控制器以及方法,就需要用后置中间件解决。
三、中间件拦截登录场景。
我们先看下官网关于中间件的定义:
中间件主要用于拦截或过滤应用的 HTTP 请求,并进行必要的业务处理。
看到官网的定义,小伙伴可能会想到,用中间件去做登录拦截真的是再好不过的呀。但是是用前置还是后置中间件呢?
<?php namespace app\middleware; class After { public function handle($request, \Closure $next) { $response = $next($request); // 添加中间件执行代码 if(empty('session')){ echo '登录不合法'; //跳转到登录页面 } return $response; } }
后台首页:
public function index(){ echo '后台首页'; }
执行结果会发现,在登录跳转前我们依然可以执行到index方法,并且可以把内容输出。
因此,后置中间件不能使用在登录场景,前置中间件是拦截登录最佳的解决方案,这个时候还需要判断当前访问是不是登录,如果是登录的话,会出现多次重定向,所以这个小伙伴们一定要做好处理。
以上就是前置后置中间件的相关介绍,在实际项目中,根据我们的实际业务逻辑来判断是用前置还是后置中间件。
以上就是ThinkPHP6的前置中间件和后置中间件有哪些区别?的详细内容,更多请关注自由互联其它相关文章!
本文共计1137个文字,预计阅读时间需要5分钟。
在上一个例子中,我们学习了定义中间件,并理解了中间件的含义。接着翻看手册,发现有两个概念:前置中间件和后置中间件。这是什么情况?两者有何区别?
一、定义的前置中间件和后置中间件是什么?
1. 前置中间件:在请求处理之前运行的中间件,可以用来修改请求或响应对象。
2. 后置中间件:在请求处理之后运行的中间件,通常用于处理响应。
二、两者有何区别?
1. 运行时机:前置中间件在请求处理之前执行,后置中间件在请求处理之后执行。
2. 功能:前置中间件主要用于处理请求,后置中间件主要用于处理响应。
3. 作用范围:前置中间件可以修改请求或响应对象,后置中间件只能处理响应。
总结:前置中间件和后置中间件是中间件家族中的两个成员,它们在运行时机、功能和作用范围上有所区别。在实际应用中,可以根据需求选择合适的中间件类型。
在上一个例子中我们学会了定义中间件,也理解了中间件的含义,再向下翻翻手册,又发现一个叫做“前置中间件”、“后置中间件”,这是什么情况?两者又有和区别呢?一、定义的区别。
从官网手册中不难发现,前置中间件和后置中间件定义就不同,我们看下面。
前置中间件定义:
<?php namespace app\middleware; class Before { public function handle($request, \Closure $next) { // 添加中间件执行代码 return $next($request); } }
后置中间件:
<?php namespace app\middleware; class After { public function handle($request, \Closure $next) { $response = $next($request); // 添加中间件执行代码 return $response; } }
仔细一看发现,说到底两者在定义的时候就是执行代码和$next($request)的顺序问题,也正是这个顺序才是前置中间件与后置中间件的关键所在。
二、$request不同。
我们可以分别在前置和后置中间件打印如下代码:
halt($request);
我们仔细对比发现,前置中间件中的控制器和方法是空的,后置中间件却可以得到控制器名称和方法。所以如果我们想获取当前访问的控制器以及方法,就需要用后置中间件解决。
三、中间件拦截登录场景。
我们先看下官网关于中间件的定义:
中间件主要用于拦截或过滤应用的 HTTP 请求,并进行必要的业务处理。
看到官网的定义,小伙伴可能会想到,用中间件去做登录拦截真的是再好不过的呀。但是是用前置还是后置中间件呢?
<?php namespace app\middleware; class After { public function handle($request, \Closure $next) { $response = $next($request); // 添加中间件执行代码 if(empty('session')){ echo '登录不合法'; //跳转到登录页面 } return $response; } }
后台首页:
public function index(){ echo '后台首页'; }
执行结果会发现,在登录跳转前我们依然可以执行到index方法,并且可以把内容输出。
因此,后置中间件不能使用在登录场景,前置中间件是拦截登录最佳的解决方案,这个时候还需要判断当前访问是不是登录,如果是登录的话,会出现多次重定向,所以这个小伙伴们一定要做好处理。
以上就是前置后置中间件的相关介绍,在实际项目中,根据我们的实际业务逻辑来判断是用前置还是后置中间件。
以上就是ThinkPHP6的前置中间件和后置中间件有哪些区别?的详细内容,更多请关注自由互联其它相关文章!

