介绍

通过控制台(终端/命令行界面)执行的程序。继承 yii\console\Controller 类,且内容与 Web Controller 相仿。

具体应用场景(举例):

  1. 给用户发 推送邮件;

  2. 定时更新系统数据;

  3. 生成日、周报表,并执行相关操作。

抽象应用场景:

  • 系统级 操作

  • 定时 执行

执行

如果你并不了解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.";


UioSun
603 声望33 粉丝

use google find the world. "该用户太懒", dead was yesterday.