ThinkPHP的MVC与CLI是独立但可协同的两套工作流:MVC处理Web请求,CLI执行后台任务;CLI命令须置于app/command/下,类需继承think\console\Command并实现configure()和execute(),命名空间为app\command,文件名与类名一致,且必须通过php think在项目根目录执行。

ThinkPHP 的 MVC 架构和 CLI 工具是两套独立但可协同的工作流:MVC 处理 Web 请求,CLI 处理后台任务。想快速上手,关键不是“一起用”,而是分清场景、各守边界、按规范组织。
CLI 命令必须放在 app/command/ 下
自定义命令类不能随便放——必须严格落在 app/command/ 目录里,比如 app/command/BackupDb.php。文件名和类名要完全一致,命名空间写成 namespace app\command;(注意反斜杠)。类需继承 think\console\Command,并实现 configure() 和 execute() 两个方法。
- configure() 中必须调用 $this->setName('backup:db') —— 这个字符串就是你终端里输入的命令名
- execute() 里写实际逻辑,比如 Db::table('log')->where('create_time', 'delete();
- 别漏掉 $this->setDescription('Daily database backup'),否则 php think list 不显示说明
运行命令前先确认执行环境
CLI 入口是项目根目录下的 think 文件(Linux/macOS)或 php think(Windows),不是全局命令,也不能跨目录调用。
- 必须在项目根目录下执行,例如:cd /var/www/myapp && php think backup:db
- Linux/macOS 报 Permission denied?运行 chmod +x think 赋予可执行权限
- 报 Class 'think\Console' not found?说明 vendor/autoload.php 没加载成功,检查是否完成 composer install
MVC 和 CLI 不共享视图,但可复用模型
控制器里写的 UserModel::find(1),命令行里也能直接用——模型层是业务逻辑的统一出口,不依赖 HTTP 上下文。
- 命令中可以直接调用模型方法:$user = \app\model\User::get(123); 或加 use 声明后简写
- 不要在命令里调 view() 或输出 HTML;CLI 命令只返回文本、JSON 或静默执行
- 配置、中间件、数据库连接等,CLI 环境默认加载全部,无需额外初始化
命令注册与缓存刷新有讲究
ThinkPHP 6.1+ 默认关闭自动发现命令,所以要么开启配置,要么手动注册路径。
- 打开 config/console.php,设 'auto_discover' => true,框架会自动扫描 app/command/
- 若关闭 auto_discover,需在 app/command.php 中返回数组:return ['app\command\'];
- 改了 app/command.php 配置后,必须删掉 runtime/console.php 缓存文件再试
- 仅修改命令类内部逻辑,不用清缓存,改完保存即可生效
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











