关于webman 控制器和响应的一个疑惑?

Van Chin

设置如下的路由

<?php

use Webman\Route;
use App\Middleware\Authenticate;

Route::post('/admins/login', [App\Controllers\AdminController::class,'login'])->name('admins.login');

Route::group('',function (){
    Route::post('/admins/logout', [App\Controllers\AdminController::class,'logout'])->name('admins.logout');
    // admins 资源路由
    Route::resource('/admins', App\Controllers\AdminController::class);
})->middleware([
    Authenticate::class
]);

Route::disableDefaultRoute();

通过 php webman route:list 查看路由List

截图

在访问 POST /admins/logout 时 有很大机率 response 里的body 为变成 GET /admins 里的数据

如果 访问一次 GET /admins 再访问 POST /admins/logout 这个机率又会提高

我不知道是 路由的问题 还是 response 响应的问题

POST /admins/logout 返回结果如下

截图

正常应该返回

截图

AdminController 部分代码如下

public function logout(Request $request) {

        $data = [
            'some_key' => 'logout => 的body 数据'
        ];

        return $this->rsp($data,'注销成功!');

    }

public function index(Request $request)
    {
        $builder = $this->model->orderBy('created_at', 'desc');

        $fields = ['id','status','created_at','updated_at'];

        if(count($fields)) {
            $builder->select(...$fields);
        }

        $per_page = $request->filled('per_page') ? $request->input('per_page') : 2;

        $data = $builder->paginate(intval($per_page));

        return  $this->rsp($data);
    }
998 3 1
3个回答

Van Chin

我不知道 是我代码的问题 还是 route 或 response 的问题

各位帮我分析一下 造成这个情况的 可能的原因

  • Van Chin 2022-09-10

    通过 requests.route 里面的信息来看 应该可以排除掉路由的问题

xiuwang

会不会是启动了2个webman,有时候请求跑到了另外一个webman,结果和预期不一致?

  • Van Chin 2022-09-10

    没有 只启动了一个webman 我在想是不是 Response 用到上次的数据了(长贮内存 或 多processe)只是猜测的

Van Chin

把设置 app.controller_reuse 设置为 false

返回结果就正常了

@walkor

controller_reuse 复用开启 是不是在Controller 中引入Trait 也会复用?

controller_reuse 是否 开启 对应用的性能影响大么?

  • walkor 2022-09-10

    会复用。
    相对于业务来说,关闭复用对性能影响可以忽略。

  • Van Chin 2022-09-10

    感谢 老大 回复
    上述 返回结果 问题 是不是因为 复用开启才导致的?能否详细说明一下

    我现在的理解是第二次请求中 Response 被复用了 如上次请求 Response 中的xx_key = 1 第二次请求没有重置或xx_key ,那么 xx_key 还是会出现在第二次请求的 Response

  • walkor 2022-09-10

    你的理解正确

  • liziyu 2022-09-10

    控制器use Trait也受 controller_reuse 开启的影响吗?
    恳请解惑!

  • walkor 2022-09-10

    Trait本身就是代码片段,Trait本身没有影响不影响的说法。

  • liziyu 2022-09-11

    谢谢老大,懂了!

年代过于久远,无法发表回答
🔝