tp6.0.2,中间件截取GET参数存在的问题(BUG吗?)

浏览:873 发布日期:2020/03/09 分类:ThinkPHP6专区
本人对中间件进行了一些测试,发现了一些问题,不知道是不是BUG,请大神指点!

运行环境:
win7,phpstudy8.1.0.1,其中,Apache2.4.39,php7.4.1。
通过composer工具,下载了tp6.0.2版本的核心文件,并依次安装了自动多应用部署、中间件。单入口文件是下载核心文件时带的,没有修改。之后部署了两个应用:admin和index。主要目录结构如下。
目录结构:
www WWW目录
└─tp602 WEB部署目录
├─app [应用目录]
│ ├─admin 应用目录
│ │ ├─common.php 函数文件
│ │ ├─controller 控制器目录
│ │ │ └─Index.php 控制器文件
│ │ └─ ... 更多类库目录
│ │
│ ├─index [应用目录]
│ │ ├─common.php 函数文件
│ │ ├─controller 控制器目录
│ │ │ └─Index.php [控制器文件]
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ ├─config 配置目录
│ │ ├─route 路由目录
│ │ │ └─route_i.php [应用路由文件]
│ │ ├─middleware.php [应用中间件注册文件]
│ │ └─ ... 更多类库目录
│ │
│ ├─middleware [中间件目录]
│ │ └─Check.php [中间件文件]
│ ├─middleware.php [全局中间件注册文件]
│ └─...

├─config 全局配置目录
│ ├─app.php 应用配置
│ ├─cache.php 缓存配置
│ ├─...
│ ├─middleware.php 中间件配置
│ └─view.php 视图配置

├─public WEB目录(对外访问目录)
│ ├─index.php 单入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写

├─extend 扩展类库目录
├─runtime 应用的运行时目录(可写,可定制)
├─vendor Composer类库目录
│ └─topthink
│ ├─framework
│ ├─think-helper
│ ├─think-multi-app 自动多应用
│ └─...
├─.env 环境变量文件
├─...

相关代码

1. app\index\controller\Index.php/文件代码如下:<?php
namespace app\index\controller;
use app\BaseController;
class Index extends BaseController
{
    // protected $middleware = [\app\middleware\Check::class];
    public function index()
    {
        echo "<br>index/index/index";
    }
}
2. app\middleware\Check.php文件代码如下:<?php
declare (strict_types = 1);
namespace app\middleware;
class Check
{
    public function handle($request, \Closure $next)
    {
        var_dump($request->param());
        return $next($request);
    }
}
测试过程

1. 全局中间件测试(没有定义路由)
在app\middleware.php中的代码如下:<?php
// 全局中间件定义文件
return [    
    \app\middleware\Check::class
];
用pathinfo方式访问,结果如下图:

用兼容方式访问,结果如下图:

注意上面两个图片的地址栏中,参数表示方式的差别和浏览器输出的不同!

2. 应用中间件测试(没有定义路由)
删除app\middleware.php,在app\index\middleware.php中添加的代码如下:<?php
// 应用中间件定义文件
return [    
    \app\middleware\Check::class
];
用pathinfo方式访问,结果如下图:

用兼容方式访问,结果如下图:

注意上面两个图片的地址栏中,参数表示方式的差别和浏览器输出的不同!

3. 控制器中间件测试(没有定义路由)
删除app\middleware.php和app\index\middleware.php,在app\index\controller\Index.php中的代码如下:<?php
namespace app\index\controller;
use app\BaseController;
class Index extends BaseController
{
    //定义控制器中间件
    protected $middleware = [\app\middleware\Check::class];
    public function index()
    {
        echo "<br>index/index/index";
    }
}
用pathinfo方式访问,结果如下图:

用兼容方式访问,结果如下图:

注意上面两个图片的地址栏中,参数表示方式,浏览器输出均相同!

4. 路由中间件
在app\index\route\route_i.php文件中定义路由中间件,代码如下:<?php
use think\facade\Route;
Route::get('hello/[:test]', 'index/hello')
    ->middleware(\app\middleware\Check::class);
测试结果与3中的结果相同。

总结:全局中间件、应用中间件好像有问题!
控制器中间件、路由中间件,是我们期望的结果!
最佳答案
评论( 相关
后面还有条评论,点击查看>>