webman如何开启URL的PATH_INFO兼容模式?

jones

webman能否通过设置来同时支持如下URL的访问请求
1、http://localhost/admin/user/manager_user/n/20/m/5000
2、http://localhost/admin/user/manager_user?n=20&m=5000
admin 为应用
user 为控制器
manager_user为方法名
n、m为manager_user方法的参数名
20 、5000分别为参数n及m的值
现象:
一、通过配置路由可以让manager_user方法获取到第1个URL中的两个参数,但此时第2个URL就获取不到了
二、不配置路由,则第2个URL可以让manager_user方法正常获取参数,但第1个又获取不到了。
问题:怎样实现二者同时可用?可否修改Request类的all方法来满足此需求?

1022 2 1
2个回答

keytehu

手册里没看到支持path_info,写两个action就好了

  • 暂无评论
banro512

优雅的解决方案,安装自动路由插件

https://www.workerman.net/plugin/17

composer require webman/auto-route

不优雅的解决方案

定义2个路由

Route::any("/admin/user/manager_user", [app\controller\User::class, 'manager_user']);
Route::any("/admin/user/manager_user/{p1}/{v1}/{p2}/{v2}", [app\controller\User::class, 'manager_user']);

控制器方法里这样来获取 get参数和路由参数

public function manager_user(Request $request,$p1="",$v1="",$p2="",$v2=""){
        $data=[
            "fullUrl"=>$request->fullUrl(),
            "get"=>$request->get(),// ?n=10&m=100 的get参数
            "p1"=>$p1,//路由参数
            "v1"=>$v1,//路由参数
            "p2"=>$p2,
            "v2"=>$v2,
        ];
        return json($data);
    }

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