Yii2 控制台应用

icy2003 程序 2020-06-15 21:25:11 1540 0条

Yii 中有一个拥有丰富功能的控制台, 它们主要用于创建网站后台处理的任务

90542-80rq3yjcsva.png

参考资料:权威文档

快速使用

  1. 使用 Yii2 高级模板 构建应用,yii 脚本就相当于 web 下的 index.php,打开 yii,关闭调试模式,提升性能。

     defined('YII_DEBUG') or define('YII_DEBUG', false);
  2. console 目录表示的是控制台应用(Yii2 的一切都可以通过配置修改,但这里只以默认为准),创建 console/controllers/IndexController.php

     <?php
     namespace console\controllers;
    
     use yii\console\Controller;
    
     class IndexController extends Controller
     {
         public function actionIndex()
         {
             echo 'hello';
         }
     }
  3. 在 yii 脚本所在的目录(根目录)打开命令行,这样一个最基本的控制台应用就完成了!

    29238-2n8j4j7uzwi.png

常用操作

当然一个控制台应用不可能那么简单,现在以一个简易计算器为例,目标是计算 x + y 的值,设想中的命令的样子:

yii index/index --operation=add --x=1 --y=2

选项配置

增加三个属性,以及 options 函数:

class IndexController extends Controller
{

    public $operation;
    public $x;
    public $y;

    public function options($actionID)
    {
        $options = parent::options($actionID);
        $options[] = 'operation';
        $options[] = 'x';
        $options[] = 'y';
        return $options;
    }

   // 其他代码省略

用 help 命令查看效果:

55281-bjpevagzykr.png

可以看到已经加了这三个选项了,其他的是 yii 默认带的,但是发现了区别没有,帮助里并没有这些选项的解释,现在增加解释文字:

52394-6xadhnuea0n.png

通过属性的注释,可以添加对应的选项的解释文字(PHP 的注释以后可以单独拿出来讲)。

接下来实现“加法”操作:

    public function actionIndex()
    {
        if ($this->operation == 'add') {
            echo $this->x + $this->y;
        }
    }

效果如下:

21310-bdah3sa5294.png

选项别名

有没有发现 operation 太长了,可以使用别名来简写选项名,其实别名早在上面的图里就有出现,-i 就是我之前加的别名:

    public function optionAliases()
    {
        $optionAliases = parent::optionAliases();
        $optionAliases['i'] = 'interactive';
        return $optionAliases;
    }

现在给 operation 加一个叫 op 的别名,查看效果,需要注意的是,选项是--开头,别名是-

33783-33z57gnk2jk.png

默认选项

如果我只想做加法……

22450-1qvc66hn0j3.png

默认传参

如果我连 x 和 y 都不想输入,可以像下面这样。

90700-q91kr7rzah.png

这个时候就可以把 x 和 y 属性相关的代码都删除了!

当然也可以给 $x 和 $y 默认值 1 和 2,这样计算器默认就是做 1 + 2,没人希望这样吧……

执行其他存在的命令

Yii2 数据库迁移组件的使用Yii2 faker 组件使用 这些文章里已经展示过 Yii2 的其他命令,如果想在控制台应用里使用这些命令,可以使用 runAction 方法:

Yii::$app->runAction('migrate/up', [
    'interactive' => true,
    'migrationPath' => '@console/migrations',
]);

等价于 yii migrate/up --interactive=1 --migrationPath=@console/migrations

补充

  1. php 在 cli(命令行)模式下不会出现超时问题,而且控制台应用对性能没有要求,所以可以用控制台应用执行一些测试、费时之类的操作。
  2. 可以借助 yii\helpers\Console 做一些命令行特有的操作,例如:等待用户输入,文字颜色等。这些内容可以另外起一篇去详细讲,这里就提一下。
  3. 对于一些通用的配置项可以丢 common 的配置里,这取决于使用者本身(例如数据库配置),但有一些组件本身就不支持控制台应用,这里不过多讨论了。
标签: yii2

非特殊说明,本博所有文章均为博主原创。