Yii2 Console 命令是专为系统级任务设计的独立 CLI 执行单元,支持位置参数、键值选项(含别名)、交互式输入及彩色输出,并可通过 Cron 定时调度。

Yii2 的 Console 命令不是 Web 请求的“副产品”,而是专为系统级任务设计的独立执行单元——它直接走 PHP CLI,不经过任何 Web 服务器,天然适合做定时、批处理、数据同步、队列消费等后台工作。
快速创建一个可运行的命令
在 console/controllers/ 下新建 HelloController.php:
- 类名必须以
Controller结尾,命名空间为console\controllers - 继承
yii\console\Controller,每个actionXxx()方法就是一个子命令 - 方法参数会自动绑定命令行位置参数(如
php yii hello/index Yii2→$name='Yii2')
支持灵活传参:选项 + 别名 + 数组
除了位置参数,还能定义带键值的选项(类似 --env=prod),并支持短别名:
- 在控制器中声明公共属性(如
public $env;) - 重写
options($actionID)返回属性名数组(['env']) - 重写
optionAliases()映射短名(['e' => 'env']) - 调用时可用
php yii hello/index --env=dev或php yii hello/index -e=dev
增强控制台交互体验
不用手写 fgets(),Yii 提供开箱即用的交互方法:
-
$this->confirm('确定要清空缓存?')→ 返回布尔值 -
$this->prompt('请输入用户名', ['default' => 'guest'])→ 支持默认值 -
use yii\helpers\Console;可输出彩色/加粗/下划线文本:Console::output(Console::ansiFormat('ERROR', [Console::FG_RED, Console::BOLD]))
接入定时调度(Cron)很简单
Linux 下只需一行 crontab 配置即可让命令周期执行:
- 编辑定时任务:
crontab -e - 添加示例(每天凌晨2点执行数据库备份):
0 2 * * * cd /var/www/myapp && /usr/bin/php yii backup/db >> /var/log/backup.log 2>&1 - 注意路径要写绝对路径,PHP 解释器也建议用全路径(
/usr/bin/php而非php)


















