介绍
通过控制台(终端/命令行界面)执行的程序。继承 yii\console\Controller
类,且内容与 Web Controller 相仿。
具体应用场景(举例):
给用户发 推送邮件;
定时更新系统数据;
生成日、周报表,并执行相关操作。
抽象应用场景:
系统级 操作
定时 执行
执行
如果你并不了解Console,你可以试试 yii
命令。它将输出存在的命令,以此为你解惑。
执行方法是,在Site的根目录,运行下列代码:yii controller/action[ argument1,[ argument2, ...]]
,controller是控制器名,action是动作,如同 ?r=controller/action 一样自然。
额外的argument
,是该动作需求的参数,可以是数组(test1,test2,...),必需与参数数量所对应,缺少会报错。
你还可以通过:[ --argument1 = value,[ --argument2 = value, ...]]
,来为属性赋值。这需要实现以下的类似代码,options为属性方法,optionAliases为属性别名方法:
public $message;
public function options()
{
return ['message'];
}
public function optionAliases()
{
return ['m' => 'message'];
}
生命周期
可能用词不标准,勿怪。
Console → yii 文件 → 调用 Controller、Model → 打印结果
编写
根据生命周期,可以发现它和Web Controller很相似,所以就不具体列代码了,唯一需要注意的是:控制台程序需要一个退出返回代码,这是一个很好的习惯:return 0
定时执行
定时执行肯定是最为核心的功能,不然控制台Controller的意义,也就不存在了——如果大家都不想玩32色小游戏的话。
下面列出一些必要的 Crontab 命令:
crontab -l # 列出所有日程
crontab -r # 删除所有日程
crontab -e # 编写日程表
日程表编写小例子:
# 时程表的格式如下 :
# f1 f2 f3 f4 f5 program
# 分 时 日 月 周几 需执行程序的完全路径
# *:每单位时间执行一次;
# num1-num2:从num1到num2时间段,程序处于活动状态(执行状态)
# */num:每隔num个时间单位执行一次。
0 0-12 */2 * 1-5 /usr/local/php/bin/php /project_path/yii test/test
额外
以下内容复制自权威指南2.0
格式化
Yii 支持格式化输出, 如果终端运行命令不支持的话则会自动退化为非格式化输出。
要输出格式的字符串很简单。以下展示了如何输出一些加粗的文字:
$this->stdout("Hello?\n", Console::BOLD);
如果你需要建立字符串动态结合的多种样式,最好使用
ansiFormat
:
$name = $this->ansiFormat('Alex', Console::FG_YELLOW); echo "Hello, my name is $name.";
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。