walkor / webman-framework

webman-framework
116 stars 57 forks source link

升级1.4.6后路由参数异常 #70

Closed krissss closed 1 year ago

krissss commented 1 year ago
Route::get('/foo', function (\Webman\Http\Request $request) {
    return 'bar';
});

升级到 1.4.6 之后当 $request 类型非 config('app.request_class') 时(且必须是等于),会报错,Controller action 中同样存在问题

krissss commented 1 year ago
Route::get('/foo/{id}', function ($request, $id) {
    return 'bar';
});

并且当 $request 不指定类型时,第一个参数变成了 {id}

walkor commented 1 year ago
Route::get('/foo/{id}', function ($request, $id) {
    return 'bar';
});

并且当 $request 不指定类型时,第一个参数变成了 {id}

这个好像没有完美的解决方案,判断第一个参数名字是否是request好像也不妥

krissss commented 1 year ago

我也看了确实如此,但是为了兼容旧版本的情况,可能需要固定第一个参数为 $request

而且即使判断 Request 注入,貌似也不能用 === 判断 request 是否是 config('app.request_class'),否则会造成第三方的扩展就必须使用用户的 config('app.request_class') 作为参数类型(这貌似互相依赖了,死结了)

walkor commented 1 year ago

而且即使判断 Request 注入,貌似也不能用 === 判断 request 是否是 config('app.request_class'),否则会造成第三方的扩展就必须使用用户的 config('app.request_class') 作为参数类型(这貌似互相依赖了,死结了)

这个用is_subclass_of 解决了

krissss commented 1 year ago

sorry,没有看到提交

那第一个参数的问题,可能只能通过一个配置的形式来解决第一个参数是否要固定为 $request 了