thinkphp5.1 中间件是什么,有什么用
中间件是什么?有什么作用?
中间件主要用于拦截或过滤应用的HTTP请求,并进行必要的业务处理。---tp5.1手册
也就是说,降低了系统的耦合;【在http请求阶段,执行中间件的入口执行方法(handle)--tp5.1】----减少了系统的一些if/else判断,因此降低了系统的耦合
中间件可以实现什么功能,例如权限验证,访问记录,重定向等等。-----这些业务的存在降低了耦合
Thinkphp中间件有什么用?
消息队列、远程方法调用RPC框架、ODBC、ORM持久化框架、缓存、资源定位、中间件定义的边界并不是很清晰,介于应用逻辑和操作系统(网络、存储系统)之间抽象层都可以算作中间件。
thinkphp5.1 中的中间件说明:
生成中间件:
php think make:middleware Check
这个指令会 application/http/middleware目录下面生成一个Check中间件
<?php namespace app\http\middleware; class Check{
//第三个参数,可以通过路由赋值传递
public function handle($request, \Closure $next, $name)
{
//下面这一句是 给控制器 传值
$request->hello = 'ThinkPHP'; if ($name == 'think') {
return redirect('index/think');
} return $next($request);
} }
中间件的入口执行方法必须是handle方法,而且第一个参数是Request对象,第二个参数是一个闭包
前置中间件/后置中间件
前置中间件:在请求阶段实现,如:判断登录状态,访问权限等等
<?php namespace app\http\middleware;
class auth{
public function handle($request, \Closure $next)
{
// 添加中间件执行代码 return $next($request);
}}
后置中间件:请求完成之后实现,如:写日志,请求分析等等
<?php namespace app\http\middleware;
class Log{
public function handle($request, \Closure $next)
{
$response = $next($request); // 添加中间件执行代码 return $response;
}}
tp5.1中的配置文件:middleware.php【可以预先注册中间件,增加别名标识】,如果没有指定命名空间则默认使用app\http\middleware
return[ 'check' => app\http\middleware\Check:class,
'auth' => app\http\middleware\Auth:class,
'log' => app\http\middleware\Log:class ]
中间件的使用:【说明当一个方法里面有多个中间件【前置中间件】时,执行顺序按照 设置中间件使用的配置 的顺序执行,后置中间件的执行一定是在请求完成之后,才执行的,所以肯定是在最后才被执行】
一、在路由定义配置中设置,如:
return [ //下面路由注册的中间件,给中间件auth传递了"ahai",给中间件check传递了"token"参数,不写,则不传递参数
Route::rule('hello/:name','hello')->middleware(['auth:ahai','check:token','log']),
Route::rule('index/:name','think')->middleware('auth')
]
二、在控制器中设置,如:
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller{ //这里配置了中间件,同时限制了中间件的生效操作,
//比如下面的auth中间件,使用了except,表示除了hello方法外,这个控制器的其他的方法都会执行中间件,
//check中间件,使用了only表示只有这个控制器的hello方法执行这个中间件
//log中间件,没有使用任何限定参数,表示这个控制器的所有方法都会执行log这个中间件
protected $middleware = [
'auth' => ['except' => ['hello'] ],
'check' => ['only' => ['hello'] ],
'log'
]; public function index()
{
echo request()->auth;
echo request()->check;
echo request()->log;
}
public function login()
{
echo request()->auth;
echo request()->check;
echo $this->request->log;
}
public function hello()
{
echo $this->request->log;
echo request()->auth;
echo request()->check;
} }
<?php
namespace app\http\middleware;
class Auth
{
public function handle($request, \Closure $next)
{
$request->auth = 'auth';
return $next($request);
}
}
<?php
namespace app\http\middleware;
class Log
{
public function handle($request, \Closure $next)
{
$request->log = 'hello';
return $next($request);
}
}
<?php
/**
* Created by ahai
* Time: 2018/9/27 0027 上午 10:18
* Email: <764882431@qq.com>
*/
namespace app\http\middleware;
Class Check
{
public function handle($request, \Closure $next)
{
$request->check = 'check';
return $next($request);
}
}
转自 http://www.thinkphp.cn/topic/59357.html
thinkphp5.1 中间件是什么,有什么用的更多相关文章
- ThinkPHP5.1x 中间件实现原理
ThinkPHP5.1x的中间件,其核心还是闭包函数的应用,来实现“责任链”模式: 模拟代码: <?php //模拟的控制器 class Controller { public function ...
- easywechat微信开发SDK之小微商户进件(一)
微信本身不提供小微商户进件的SDK,偶然发现easywechat这么个东西,官网地址是https://www.easywechat.com/ 整合了微信开发中常用的接口,包括微信公众号相关接口,微信 ...
- 使用 Casbin 作为 ThinkPHP 的权限控制中间件
PHP-Casbin 是一个强大的.高效的开源访问控制框架,它支持基于各种访问控制模型的权限管理. Think-Casbin 是一个专为 ThinkPHP5.1 定制的 Casbin 的扩展包,使开发 ...
- 详细解析Thinkphp5.1源码执行入口文件index.php运行过程
详细解析Thinkphp5.1源码执行入口文件index.php运行过程 运行了public目录下的index.php文件后,tp的运行整个运行过程的解析 入口文件index.php代码如下: < ...
- ASP.NET Core 中的那些认证中间件及一些重要知识点
前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...
- ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”
DeveloperExceptionPageMiddleware中间件利用呈现出来的错误页面实现抛出异常和当前请求的详细信息以辅助开发人员更好地进行纠错诊断工作,而ExceptionHandlerMi ...
- ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”
在<ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式>中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将 ...
- ASP.NET Core 中间件之压缩、缓存
前言 今天给大家介绍一下在 ASP.NET Core 日常开发中用的比较多的两个中间件,它们都是出自于微软的 ASP.NET 团队,他们分别是 Microsoft.AspNetCore.Respons ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
随机推荐
- LC 687. Longest Univalue Path
Given a binary tree, find the length of the longest path where each node in the path has the same va ...
- 什么是 AIDL 以及如何使用
①aidl 是 Android interface definition Language 的英文缩写,意思 Android 接口定义语言.②使用 aidl 可以帮助我们发布以及调用远程服务,实现跨进 ...
- SQL Server里如何处理死锁 (转)
http://www.cnblogs.com/woodytu/p/6437049.html 在今天的文章里,我想谈下SQL Server里如何处理死锁.当2个查询彼此等待时会发生死锁,没有一个查询可以 ...
- Redis 分库
Redis 可以分库,相当于 MySQL 中的 database.控制数据库总数在 redis配置文件中设置,默认是 16 个.数据库名称是整数索引标识,而不是由一个数据库名称字符串. 选择数据库用 ...
- git 参考手册-简明指南
很久没发文了,来头条以后更忙了,也没精力去分享一些有营养的内容了.这次分享的 git 的方方面面,基本来自于我的笔记.git 这东西算是为数不多每天都要用的东西了,但是我觉得也不至于从头至尾去了解他的 ...
- 【ABAP系列】【第五篇】SAP ABAP7.50 之用户接口
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列][第五篇]SAP ABAP7.5 ...
- FastAdmin-T
FastAdmin 注意食用姿势,建议先通读官方文档一次,在看 根据环境及配置的不同,仅作参考 修改mysql表注释ALTER TABLE student COMMENT '学生表'; fastadm ...
- 【miscellaneous】最新HEVC/H.265 4K视频,显卡解码测试
转载自:http://bbs.zol.com.cn/diybbs/d34441_76103.html 4K这个概念也在最近几年开始流行了起来,无论是4K显示器.4K电视盒子,还是4K游戏对硬件的要求也 ...
- 【VS开发】【电子电路技术】PCI与PCIE主板插卡与插槽识别
一.PCI PCI接口分为32bit和64bit两种,32bit就是一般台式机使用的普通的pci接口(图一.图三),64bit接口比32bit接口长一些一般只出现在服务器上(图四.图五).32bit和 ...
- SolidWorks学习笔记6抽壳,加强筋,扫描,放样
抽壳 概念:移除一个或者多个面,然后将其余的模型外表面向内或者向外偏移相等或者不等的距离 针对不同面设置不同厚度 方向参考 有实体的一侧是内测, 没有实体的一侧是外侧 顺序 先圆角再抽壳 加强筋. 点 ...