Yii 中有一个拥有丰富功能的控制台, 它们主要用于创建网站后台处理的任务
参考资料:权威文档
快速使用
-
使用 Yii2 高级模板 构建应用,yii 脚本就相当于 web 下的 index.php,打开 yii,关闭调试模式,提升性能。
defined('YII_DEBUG') or define('YII_DEBUG', false);
-
console 目录表示的是控制台应用(Yii2 的一切都可以通过配置修改,但这里只以默认为准),创建
console/controllers/IndexController.php
<?php namespace console\controllers; use yii\console\Controller; class IndexController extends Controller { public function actionIndex() { echo 'hello'; } }
-
在 yii 脚本所在的目录(根目录)打开命令行,这样一个最基本的控制台应用就完成了!
常用操作
当然一个控制台应用不可能那么简单,现在以一个简易计算器为例,目标是计算 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 命令查看效果:
可以看到已经加了这三个选项了,其他的是 yii 默认带的,但是发现了区别没有,帮助里并没有这些选项的解释,现在增加解释文字:
通过属性的注释,可以添加对应的选项的解释文字(PHP 的注释以后可以单独拿出来讲)。
接下来实现“加法”操作:
public function actionIndex()
{
if ($this->operation == 'add') {
echo $this->x + $this->y;
}
}
效果如下:
选项别名
有没有发现 operation 太长了,可以使用别名来简写选项名,其实别名早在上面的图里就有出现,-i
就是我之前加的别名:
public function optionAliases()
{
$optionAliases = parent::optionAliases();
$optionAliases['i'] = 'interactive';
return $optionAliases;
}
现在给 operation 加一个叫 op 的别名,查看效果,需要注意的是,选项是--
开头,别名是-
:
默认选项
如果我只想做加法……
默认传参
如果我连 x 和 y 都不想输入,可以像下面这样。
这个时候就可以把 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
补充
- php 在 cli(命令行)模式下不会出现超时问题,而且控制台应用对性能没有要求,所以可以用控制台应用执行一些测试、费时之类的操作。
- 可以借助
yii\helpers\Console
做一些命令行特有的操作,例如:等待用户输入,文字颜色等。这些内容可以另外起一篇去详细讲,这里就提一下。 - 对于一些通用的配置项可以丢 common 的配置里,这取决于使用者本身(例如数据库配置),但有一些组件本身就不支持控制台应用,这里不过多讨论了。