ThinkPHP 6 默认控制器名由路由规则决定,需修改 route/app.php 中的 Route::get('/', 'index/index') 为对应控制器方法,如 Route::get('/', 'user/login')。

ThinkPHP 6 默认控制器名在哪改
ThinkPHP 6 的默认控制器名(即访问根路径 / 时触发的控制器)不是硬编码在某个文件里,而是由路由规则决定的。你不能靠改一个配置项就全局替换“Index”控制器——必须改路由定义。
常见错误是去翻 config/app.php 或 config/route.php 里找 “default_controller” 这类键,但 TP6 已移除该配置项。直接改它没用,请求仍会 404 或 fallback 到默认行为。
- 入口路由规则写在
route/app.php(或route/route.php,取决于应用模式) - TP6 默认注册了闭包式根路由:
Route::get('/', 'index/index'); - 想让
/指向User/login,就把这行改成:Route::get('/', 'user/login');
自定义路由中控制器名大小写与目录结构的关系
TP6 路由解析控制器时,会把斜杠前的部分(如 admin/user 中的 admin)转成驼峰并首字母大写,再映射到 app/controller/Admin.php 类;斜杠后的部分(user)则作为方法名。
所以 'admin/user' 对应的是 app/controller/Admin.php 里的 user() 方法,不是 app/controller/Admin/User.php —— 后者是子命名空间写法,需额外配置。
立即学习“PHP免费学习笔记(深入)”;
- 控制器类名必须首字母大写,文件名也必须匹配(
Admin.php,不是admin.php) - 如果用了多级目录,比如
app/controller/api/v1/User.php,路由应写成'api.v1.user/index'(点号分隔),且类需声明命名空间app\controller\api\v1\User - 大小写不一致会导致类自动加载失败,报错:
Class app\controller\User does not exist
不想改每个路由?用 Route::rule() 批量映射
当项目里大量路由都指向同一组控制器前缀(比如所有后台接口都要走 Admin 控制器),手动逐条改太容易漏。这时可以用通配规则统一重写前缀。
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
例如,把所有以 /manage/xxx 开头的请求,映射到 admin/xxx 控制器方法:
Route::rule('manage/:action', 'admin/:action');
注意这种写法绕过了标准的模块/控制器/操作三层解析,:action 是变量,不是固定字符串。
- 该规则必须放在默认路由(如
Route::get('/', ...))之后,否则会被提前匹配拦截 - 不支持嵌套参数,比如
manage/:controller/:action需要显式写出完整映射,否则 TP6 不会自动补全控制器后缀 - 调试时可用
php think route:list查看最终生效的路由表,确认是否被覆盖或冲突
使用 Route::domain() 时控制器映射容易忽略的命名空间问题
给子域名单独配控制器(比如 admin.example.com → AdminIndex 类),很多人只改域名绑定,却忘了控制器类的命名空间可能和默认不同。
TP6 默认控制器在 app\controller 下,但如果你为 admin 域名新建了 app\controller\admin\AdminIndex.php,那它的命名空间就得是 app\controller\admin,而路由写法也要同步调整。
- 错误写法:
Route::domain('admin.example.com')->group(...)->append(['controller' => 'AdminIndex']);—— 这不会自动加命名空间 - 正确做法:在 group 内明确指定完整类名或用闭包 +
think\App::invokeMethod() - 更稳妥的方式是配合
Route::setDomainBind()绑定域名到模块,再通过模块配置自动加载对应命名空间
控制器映射不是字符串替换,它依赖自动加载器能否准确定位类。路径、命名空间、路由字符串三者差一个字母,就进不了方法体。


















