ThinkPHP定义路由的核心是将“URL地址+请求方法”映射到控制器方法,需写入app/route/app.php(单应用)或app/admin/route/app.php(多应用),开头声明use thinkacadeRoute;,优先使用Route::get()等语义化方法,变量统一用语法,启用url_route_on并执行php think route:clear清除缓存。

ThinkPHP 定义路由,核心是告诉框架“某个 URL 地址 + 请求方法”该交给哪个控制器方法处理。不定义路由,就只能用默认 PATH_INFO 格式(如 /index.php?s=index/user/profile),无法实现简洁、语义化的地址(如 /user/profile)。
写在正确的文件里
路由规则必须写在应用级路由文件中,不是 config/route.php,而是:
- 单应用项目:修改
app/route/app.php(TP6 常见路径)或route/app.php(TP8 默认) - 多应用项目(如 admin):写在
app/admin/route/app.php - 文件开头必须有
use thinkacadeRoute;,否则 Route 类不可用 - 写错位置(比如丢进 config/route.php)会导致路由完全不加载,页面空白或跳首页,而不是 404
用对注册方式
推荐优先使用语义化快捷方法,清晰安全:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
Route::get('user/profile', 'app\controller\User@profile');—— 仅响应 GET -
Route::post('api/login', 'api.Login/login');—— 仅响应 POST -
Route::match(['GET', 'POST'], 'form/submit', 'Form/handle');—— 多方法支持 - 避免直接用
Route::rule()写业务路由,它虽灵活但默认不启用严格模式,易引发 CSRF 中间件错位或方法混淆
变量和参数要写准
ThinkPHP 6 统一用 <id></id> 语法,:id 是 TP5 遗留写法,开启严格模式后会被忽略:
- 正确:
'user/<id>'</id>或带正则的'user/<id:>'</id:>(能匹配 v1.2 这类版本号) - 错误:
'user/:id'可能被当作普通字符串,不解析为变量 - 控制器方法参数名必须与变量名一致且顺序严格对应,例如
'blog/<year>/<month>/<id>'</id></month></year>→public function read($year, $month, $id) - 可选参数用方括号:
'user/<id>'</id>或'hello/[<name>]'</name>
别忘了启用和清理
两个容易忽略但致命的操作:
- 确认
config/app.php中'url_route_on' => true已开启,否则所有路由定义无效 - 每次改完路由文件,必须执行
php think route:clear清除路由缓存,否则新规则不生效
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










