目录

1、中间件的初始化工作

2、前置和后置中间件区别

3、中间件给主页面传值

4、中间件的工作顺序


1、中间件的初始化工作

使用中间件首先得创建中间件,可以通过cmd找到对应tp6项目路径,输入以下composer命令自动创建中间件目录及文件

php think make:middleware Check

创建好后如图:

也可以手动创建middleware目录和对应文件:

<?php
declare (strict_types = 1);namespace app\middleware;use think\Response;class Check
{/*** 处理请求** @param \think\Request $request* @param \Closure       $next* @return Response*/public function handle($request, \Closure $next){//}
}

 中间件使用需先声明,声明方法如下:

1、找到route/middleware.php写入对应声明,如下
<?php
// 全局中间件定义文件
return [// 全局请求缓存// \think\middleware\CheckRequestCache::class,// 多语言加载// \think\middleware\LoadLangPack::class,// Session初始化// \think\middleware\SessionInit::class\app\middleware\Check2::class,//方法一,直接引入声明'check',//方法二,别名引入法
];
2、使用方法二别名引入时,需要先到config/middleware.php里配置别名,配置方法如下:
<?php
// 中间件配置
return [// 别名或分组'alias'    => ['check'=>\app\middleware\Check::class,'check2'=>\app\middleware\Check2::class,],// 优先级设置,此数组中的中间件会按照数组中的顺序优先执行'priority' => [],
];

这样第一步里就可以直接使用别名进行声明了。

3、还有一种比较常用的中间件使用方法,就是不通过1、2声明,而使用路由中间件
路由中间件声明方法如下:
找到对应的路由文件,如route/app.php书写如下:
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
use think\facade\Route;Route::rule('hhh','test/index')->middleware(\app\middleware\Check2::class);

这样访问路径时便可以通过该中间件进行限制。

2、前置和后置中间件区别

前置和后置中间件都是很常用的:

前置中间件的通常写法:

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

后置中间件的通常写法:

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

也可以写在一起:

    public function handle1($request,\Closure $next){//处理HTTP请求,中间键代码if($request->param('name')==='index'){return redirect('../');//返回首页}//以上部分为前置中间件echo "前置中间件<br>";//获取响应,获取响应之前的代码为前置中间件,$response=$next($request);//获取响应之后的为后置中间件的执行内容//以后部分为后置中间件echo "后置中间件<br>";//这里回调本身返回response对象return $response;}

可以看到前置和后置中间件的执行区别就在于是否在获取$next($request)前或后。

通过还有个收尾工作可以附加,就是在中间件中写入end方法如下:

    public function end(Response $response){echo '<br>收尾工作';}

执行先后顺序如下:

3、中间件给主页面传值

比较简单的传值如下:

可以通过给请求对象赋值的方式传参给控制器(或者其它地方),例如

<?phpnamespace 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
}

4、中间件的工作顺序

全局中间件>局部中间件>路由中间件>页面组件

中间件的内部执行顺序为:前置>页面操作>后置>return操作>end收尾

tp6 中间件的常用操作相关推荐

  1. tp6 SQL调试常用操作

    1.fetchSql(),数据表和DB类都能调用,案例如下: public function index(){$res=Db::name('test2')->fetchSql()->fin ...

  2. 核心要素及常用操作详解

    核心要素及常用操作详解 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5z6s4kZN-1678660733651)(http://49.7.203.222:3000/ ...

  3. TensorFlow常用操作:代码示例

    1,定义矩阵代码示例: import tensorflow as tftf.zeros([3,4]) #定义3行4列元素均为0的矩阵tensor=tf.constant([1,2,3,4])#定义一维 ...

  4. Ubuntu 常用操作

    Ubuntu常用操作 外观操作 修改应用icon图标 终端美化 内存管理 内存查询 分区管理 日志清理 操作执行 自动执行多条命令 外观操作 修改应用icon图标 在/usr/share/applic ...

  5. IOS沙盒Files目录说明和常用操作

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...

  6. 用Python轻松搞定Excel中的20个常用操作

    来源 |早起Python(ID: zaoqi-python) Excel与Python都是数据分析中常用的工具,本文将使用动态图(Excel)+代码(Python)的方式来演示这两种工具是如何实现数据 ...

  7. python和R对dataframe的常用操作的差异:head、tail、shape、dim、nrow、ncol、descirbe、summary、str

    python和R对dataframe的常用操作的差异:head.tail.shape.dim.nrow.ncol.descirbe.summary.str # python df.head() # R ...

  8. 【node】Sequelize常用操作、基本增删改查

    [node]Sequelize常用操作.基本增删改查 sequelize初始化 先初始化一个数据库实例 再初始化一个model实例 sequelize的数据类型 基本增删改查的写法 SELECT * ...

  9. JavaScript:对Object对象的一些常用操作总结

    JavaScript对Object对象的一些常用操作总结. 一.Object.assign() 1.可以用作对象的复制 var obj = { a: 1 }; var copy = Object.as ...

最新文章

  1. ASP.NET2.0 遍历文件夹下所有图片【月儿原创】
  2. Linux复制文件scp
  3. dede 5.6自定义模型列表生成问题,img.lib.php on line 42,请各位帮忙看看
  4. redis集群扩容和缩容_Redis一站式管理平台,支持集群的创建、管理、监控和报警...
  5. MOXy作为您的JAX-RS JSON提供程序–客户端
  6. php检查在线用户,php – 检查用户是否在线laravel
  7. 一个ubuntu server下的oracle10g简单生产库全库备份脚本
  8. mysql 大小写问题
  9. Https的数据请求的证书设置
  10. ASP.NET profile之 找不到存储过程'dbo.aspnet_CheckSchemaVersion'
  11. 疫情之下,计算机仿真程序告诉你,没事别乱出门!企业复工务必做到八个“一”...
  12. flstudio插件找不到_大家都用啥插件啊
  13. 宏观经济模型代码来源 :MMB库
  14. cityscapes数据集上的类别统计分布
  15. Transaction
  16. HashMap为什么线程不安全?
  17. destoon网站mysql分表_destoon二次开发常用数据库操作_PHP
  18. c++实现汉诺塔(图文并茂)
  19. java中集合的基础知识_javaSE基础知识之集合类
  20. 爬虫必备-mysqldb-海量数据解决方案

热门文章

  1. 如何下载大兴区卫星地图高清版大图?
  2. mesh导出OBJ、STL格式和win窗口调用
  3. html网页特效微课,让微课走进中职网页设计与制作教学
  4. slf4j绑定log4j使用
  5. C#值类型后问号的作用
  6. Android AppOpsService服务实践贴
  7. 数学基础:角度,弧度,三角函数
  8. 算法进阶指南每日一题(碎碎念念)
  9. 数据恢复软件BadCopy ProV4.10
  10. 卡巴斯基关于360胡乱解读“超级工厂”的声明