多模块下,miss路由失效
所属功能组件
路由(Route)
ThinkPHP 版本
8.1.2
操作系统
Windows
错误信息
多模块情况下miss路由失效
仅有以下一个路由文件
`<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- // | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st [email protected] // +---------------------------------------------------------------------- use think\facade\Route; // 多模块下如何定义路由 // 参考 https://doc.thinkphp.cn/@wiki/custom-directory-with-route.html Route::group(function () { Route::get('/', 'XingMing/index'); Route::miss(function () { return '404'; }); })->namespace('app\controller\web');
Route::miss(function () { return '404'; }); Route::auto();`
附route.php参数配置
`<?php // +---------------------------------------------------------------------- // | 路由设置 // +----------------------------------------------------------------------
return [
// pathinfo分隔符
'pathinfo_depr' => '/',
// 是否开启路由延迟解析
'url_lazy_route' => false,
// 是否强制使用路由
'url_route_must' => true,
// 是否区分大小写
'url_case_sensitive' => false,
// 合并路由规则
'route_rule_merge' => false,
// 路由是否完全匹配
'route_complete_match' => true,
// 去除斜杠
'remove_slash' => false,
// 默认的路由变量规则
'default_route_pattern' => '[\w.]+',
// URL伪静态后缀
'url_html_suffix' => 'html',
// 访问控制器层名称
'controller_layer' => 'controller',
// 空控制器名
'empty_controller' => 'Error',
// 是否使用控制器后缀
'controller_suffix' => false,
// 默认模块名(开启自动多模块有效)
'default_module' => 'index',
// 默认控制器名
'default_controller' => 'Index',
// 默认操作名
'default_action' => 'index',
// 操作方法后缀
'action_suffix' => '',
// 非路由变量是否使用普通参数方式(用于URL生成)
'url_common_param' => true,
// 操作方法的参数绑定方式 route get param
'action_bind_param' => 'get',
// 请求缓存规则 true为自动规则
'request_cache_key' => true,
// 请求缓存有效期
'request_cache_expire' => null,
// 全局请求缓存排除规则
'request_cache_except' => [],
// 请求缓存的Tag
'request_cache_tag' => '',
];`
其它说明
No response
https://github.com/top-think/framework/issues/3125#issuecomment-2688205303
同理。同目录下的空控制器也不会被调用。
`<?php namespace app\controller\web;
class Error { public function __call($method, $args) { return 'error request!'; } }`
我通过在分组内去掉namespace的方式使miss路由重新生效。希望能检查这个问题,期待复现问题并给出方案。
可以用开发版测试下这个问题 有改进过
miss依然失效,新问题:访问 http://localhost:8000/web/index/hello/tp 控制器无法正确接收参数 控制器位置 app/controller/web/Index.php
use think\facade\Route;
Route::get('think', function () {
return 'hello,ThinkPHP8!';
});
Route::get('hello/:name', 'web/index/hello');
Route::auto();
Route::miss(function() {
return '404 Not Found!';
});
版本:version 8.x-dev
miss依然失效,新问题:访问 http://localhost:8000/web/index/hello/tp 控制器无法正确接收参数 控制器位置 app/controller/web/Index.php
use think\facade\Route;
Route::get('think', function () {return 'hello,ThinkPHP8!';});Route::get('hello/:name', 'web/index/hello');Route::auto();Route::miss(function() {return '404 Not Found!';});
去掉auto路由定义 改用多模块分组定义