framework
framework copied to clipboard
8.1 路由异常
所属功能组件
路由(Route)
ThinkPHP 版本
8.1.2
操作系统
debian/mac/windows
错误信息
Route::group(function () {
Route::get('index', 'v1.PublicController/index')->name('index')->option(['real_name' => '首页']);
Route::get('user/xxx', 'v1.user.UserController/xxx')->name('xxx')->option(['real_name' => 'xxx']);
Route::group(function () {
Route::get('user/member/card/index', 'v1.user.MemberCardController/index')->name('userMemberCardIndex');
});
Route::group(function () {
Route::get('bb/bb', 'v1.user.bbb/bb')->name('bb')->option(['real_name' => 'bbb']);
});
});
user/member/card/index 上面的路由都可以正常访问,下面的路由全都404 把 bb/bb 放到 user/member/card/index 上面后 bb/bb 可以正常访问 bb/bb 下面的404了
其它说明
No response
Route::group('coupons', function () {
Route::get('/user', 'UserCouponsController/user')->name('couponsUser');
Route::post('/usable', 'UserCouponsController/usable')->name('couponsUsable');
})->prefix('v1.user.');
使用prefix后整个路由组也会404
你这种路由定义 后面的是执行不到的 不管哪个版本都一样 和8.1无关
8.0.4可以用啊
Route::group('a', function () {
Route::group(function () {
Route::get('b',function (){
return 'b';
});
});
Route::group(function (){
Route::get('c',function (){
return 'c';
});
});
});
我是升级8遇到这个问题, a/b 可以访问, a/c not found 我是在crmeb代码里面发现很多这种group没有name名的这种分组,我不知道以前是不是支持这样写,或者是bug刚好可以这样写 以前是6.1.5的版本 现在是8.1.2版本是不支持这样写了
是否可以让它支持下面这种写法,或有其他解决方案
Route::group('a', function () {
Route::group(function () {
Route::get('b',function (){
return 'b';
});
})->name('b');
Route::group(function (){
Route::get('c',function (){
return 'c';
});
})->name('c');
});
@liu21st 请确认下
https://github.com/top-think/framework/pull/3128 我尝试修复了这个问题,我这边测试了下没有问题了 @FlameMida @liu21st
https://github.com/top-think/framework/commit/ac14f535ffcb46c6a017b94df881bb44b5172742
在这一次提交记录里面,https://github.com/top-think/framework/commit/ac14f535ffcb46c6a017b94df881bb44b5172742#diff-c8a08aa36a5de9b4314a7d18c69ffaae6945343bc00fd79775232dc5ce04b0e4R312 这个位置的逻辑是直接return了,我觉得应该继续循环进行判断是否有匹配的路由
如图 $rules 有多条记录的时候,如果未满足条件被直接return了,我的修改是如果false应该继续检查其他路由是否满足 @liu21st 你看下是不是这个问题
两个相同的分组为啥不合并呢?
两个相同的分组为啥不合并呢?
首先以前的版本确实支持的,至于使用场景是有的
我的情况是使用相同中间件的合并成一组,但路由还是想保持一致,比如用户开通了某个功能的时候某些路由会有不同的业务逻辑,这些路由我就合并到一起,这些路由会添加某个中间件
crmeb那边是不同功能组进行了分组,是option不同分组,他这个是路由功能扩展了
你可以看下 https://gitee.com/ZhongBangKeJi/CRMEB/blob/master/crmeb/app/adminapi/route/setting.php
是不是开启了分组合并路由检测后导致的?
是不是开启了分组合并路由检测后导致的?
我有仔细看了下代码确实是 这个问题 新版本需要 把 'route_rule_merge' => false
是不是开启了分组合并路由检测后导致的?
我有仔细看了下代码确实是 这个问题 新版本需要 把
'route_rule_merge' => false
我记得这个参数默认就应该是false吧 这个地方的改进是为了支持嵌套分组的路由规则直接合并解析 如果要做太多调整的话 不如直接去掉也不影响实际解析的