tp6 中间件的常用操作
目录
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 中间件的常用操作相关推荐
- tp6 SQL调试常用操作
1.fetchSql(),数据表和DB类都能调用,案例如下: public function index(){$res=Db::name('test2')->fetchSql()->fin ...
- 核心要素及常用操作详解
核心要素及常用操作详解 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5z6s4kZN-1678660733651)(http://49.7.203.222:3000/ ...
- TensorFlow常用操作:代码示例
1,定义矩阵代码示例: import tensorflow as tftf.zeros([3,4]) #定义3行4列元素均为0的矩阵tensor=tf.constant([1,2,3,4])#定义一维 ...
- Ubuntu 常用操作
Ubuntu常用操作 外观操作 修改应用icon图标 终端美化 内存管理 内存查询 分区管理 日志清理 操作执行 自动执行多条命令 外观操作 修改应用icon图标 在/usr/share/applic ...
- IOS沙盒Files目录说明和常用操作
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...
- 用Python轻松搞定Excel中的20个常用操作
来源 |早起Python(ID: zaoqi-python) Excel与Python都是数据分析中常用的工具,本文将使用动态图(Excel)+代码(Python)的方式来演示这两种工具是如何实现数据 ...
- 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 ...
- 【node】Sequelize常用操作、基本增删改查
[node]Sequelize常用操作.基本增删改查 sequelize初始化 先初始化一个数据库实例 再初始化一个model实例 sequelize的数据类型 基本增删改查的写法 SELECT * ...
- JavaScript:对Object对象的一些常用操作总结
JavaScript对Object对象的一些常用操作总结. 一.Object.assign() 1.可以用作对象的复制 var obj = { a: 1 }; var copy = Object.as ...
最新文章
- ASP.NET2.0 遍历文件夹下所有图片【月儿原创】
- Linux复制文件scp
- dede 5.6自定义模型列表生成问题,img.lib.php on line 42,请各位帮忙看看
- redis集群扩容和缩容_Redis一站式管理平台,支持集群的创建、管理、监控和报警...
- MOXy作为您的JAX-RS JSON提供程序–客户端
- php检查在线用户,php – 检查用户是否在线laravel
- 一个ubuntu server下的oracle10g简单生产库全库备份脚本
- mysql 大小写问题
- Https的数据请求的证书设置
- ASP.NET profile之 找不到存储过程'dbo.aspnet_CheckSchemaVersion'
- 疫情之下,计算机仿真程序告诉你,没事别乱出门!企业复工务必做到八个“一”...
- flstudio插件找不到_大家都用啥插件啊
- 宏观经济模型代码来源 :MMB库
- cityscapes数据集上的类别统计分布
- Transaction
- HashMap为什么线程不安全?
- destoon网站mysql分表_destoon二次开发常用数据库操作_PHP
- c++实现汉诺塔(图文并茂)
- java中集合的基础知识_javaSE基础知识之集合类
- 爬虫必备-mysqldb-海量数据解决方案