搜索
系统检测到您的用户名不符合规范:

探讨:关于中间件传参的问题

浏览:1111 发布日期:2020年03月19日 分类:ThinkPHP6专区 关键字: thinkphp6 中间件 传参 对象 属性
【控制器中间件传参】的简单例子:

多应用模式下【index】和【admin】两个应用
接下来的操作是【全局定义】中间件的方式!!!

首先,在框架根目录中修改【config】目录下的【middleware.php】文件
// 中间件配置
return [
// 别名或分组
'alias' => [
'check' => app\middleware\Check::class, //这里写入别名【check】和带命名空间的【Check】类
],
//
'priority' => [],
];

接下来,在【app】根目录中修改【middleware.php】定义文件内容
<?php
// 全局中间件定义文件
return [
// 全局请求缓存
// \think\middleware\CheckRequestCache::class,
// 多语言加载
// \think\middleware\LoadLangPack::class,
// Session初始化
\think\middleware\SessionInit::class,

'check' ⬅ 要定义的中间件在这里!!!采用了【别名】方式
];
以上就完成了中间件的全局定义配置,
接下来是创建中间件文件【check.php】以及自定义文件【index.php】的过程

在【admin】目录下新建【middleware】目录,
并创建【check.php】文件,
写入内容:
namespace app\middleware;

class check
{
public function handle($request, \Closure $next)
{
$request->name = '我就是个小弟弟'; // 可以自己自定义修改的
return $next($request); // return 的格式是固定的,不要更改!!!
}
}

之后,进入【admin】目录-》【controller】目录下,
创建自定义的【index.php】控制器,内容写入:
namespace app\admin\controller;

use think\Request;

class Index
{
public function index(Request $request)
{
echo $request->name; // 这里打印一下name属性 我就是个小弟弟
}

}
以上就完成了最简单的中间件传参方式。

扩充实例应用:
最后的【index.php】文件,一般情况我们会继承官方手册里说的【baseController】控制器,所以还可以用以下方式调用参数:
namespace app\admin\controller;

use think\Request; ⬅ 把这里删除掉

class Index extends baseController ⬅ 这里继承baseController
{
public function index(Request $request)
{
echo $this->app->request->name; //直接调用app对象中request实例的name属性
echo $this->request->name; // 直接调用request实例中name属性
}

}

扩展思路:
只需要依赖注入的方式【Request $request】将对象注入到index方法中即可,控制器中间件传参也好,路由器中间件传参也罢,都是通过依赖注入的方式修改Request对象中的属性。如果我们在【admin】应用下的【config -> route.php】路由中定义了规则:
Route::rule('/:name','index');
浏览器中输入地址:
http://localhost/admin/haha
此时根据路由定义,传入了参数name,值为【haha】,
按照常规思维会误认为【haha】就是【$request->name】的值,
其实【$request->param['name'] 】才是【haha】,
而【$request->name】是【request】对象的属性值,
通过dump函数,打印一下:
dump($this->request);
看到pathinfo和param里的【haha】了吗,param属性中是【name=>haha】,
这是URL地址的传参值。
所以说,中间件是可以既修改request的属性值,也可以增加新的属性,这个才是大家有时候会迷惑的地方吧。
最佳答案
收藏
犀利酸奶
积分:678 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /