tp5.1到tp8.0的命名空间迁移是伴随内核重构的系统性调整:需改用绝对命名空间、严格psr-4路径、重写门面引用、手动注册模块扫描路径,并同步更新配置与服务提供者命名空间。

TP5.1 到 TP8.0 的命名空间迁移不是简单替换,而是伴随框架内核重构的系统性调整。旧写法在 8.0 下会直接报错(如 Class 'thinkController' not found),必须按新规范重写类引用、目录结构和自动加载逻辑。
控制器与模型类路径需显式声明完整命名空间
TP5.1 允许短命名空间(如 use thinkModel;)并依赖自动补全;TP8.0 要求所有类使用绝对命名空间,且控制器/模型必须严格匹配 PSR-4 规范。
- 控制器类必须以
appcontroller开头,例如:namespace appcontroller;,不能省略app前缀 - 模型类统一放在
appmodel下,命名空间为appmodel,继承thinkModel(注意:不是thinkdbModel) - 删除所有
use thinkController;或use thinkModel;这类全局短名引用,改为具体路径或直接继承基类
Facade 门面与核心类引用全部迁移至新路径
TP8.0 已移除旧版门面别名机制,thinkFacade 及其子类不再支持自动代理,必须改用 thinkacade* 下的标准门面,或更推荐依赖注入方式。
-
Cache::get()→ 改为app('cache')->get()或thinkacadeCache::get() -
Db::table()→ 必须use thinkacadeDb;,不可再用use thinkDb; - 日志、验证、事件等门面同理,全部从
thinkacadeXxx引入,且类名首字母大写(如Validate不是validate)
多模块命名空间必须手动注册扫描路径
TP5.1 的 MODULE_ALLOW_LIST 自动识别模块;TP8.0 完全取消自动发现,每个模块的控制器命名空间都需在 config/annotation.php 中显式添加。
- 例如新增
admin模块,控制器位于appdmincontroller,则需在annotation.php中加入:'scan_namespaces' => ['app\controller', 'app\admin\controller'] - 若漏配,
#[Route]注解将被完全忽略,路由不生效且无任何提示 - 所有模块的命名空间末尾不能带斜杠,且反斜杠必须双写(
app\admin\controller),否则 PHP 解析失败
配置文件与服务提供者命名空间同步更新
TP8.0 的配置加载、命令注册、中间件绑定均依赖精确命名空间,任何偏差都会导致功能静默失效。
-
config/app.php中的providers数组,服务提供者类必须是完整命名空间,如appProvidersAppServiceProvider::class - 自定义命令类放在
appcommand下,命名空间为appcommand,并在config/console.php的commands中显式注册 - 数据库迁移类(
DatabaseMigrationsCreateUsersTable)仅限database/migrations/目录,命名空间必须为DatabaseMigrations,不可自定义前缀











