乐趣区

关于php:yii2-Console-yii2开发控制台应用时的还我漂漂拳

yii2 / Console – yii2 开发控制台利用时的还我漂漂拳

yii2console

公布于 2018-02-24

之所以放到此专栏次要是该文章对咱们学习 yii2-queue 有很大帮忙。

咱们常常应用 yii2 开发命令行利用,也会遇到比方让用户在命令行输出信息、抉择等操作,明天为大家介绍的这个 yii2 的 Console 类轻松的帮你搞定这件事件,有了它,你的命令行利用将更加高逼格。

为了学习更简略,咱们用问答的模式开始。

Console 在哪里?

Console 是 yii2 的一个帮忙类,所在文件夹为 /vendor/yiisoft/yii2/helpers,外面有 BaseConsoleConsole,Console 类继承于 BaseConsole,BaseConsole 不容许被调用,因而咱们都是应用 Console 类。

在代码里要应用套路

use yiihelpersConsole;
...
Console::xxxx()

Hello World

当咱们开发 yii2 的控制台利用的时候,能够 echo 一个字符串,这样命令行会显示,那么用 Console 如何实现那?看代码

public function actionIndex() {Console::output(“Hello World”);
}

对,用 Console::output, 你可能会说,“这还没有 echo 简略那?”,那么咱们接着看。

五彩缤纷的 Hello World

我当初想让 Hello 是黄色的,World 是绿色的,怎么玩?

public function actionIndex() {$hello = Console::ansiFormat("Hello",[Console::FG_YELLOW]);
  $world = Console::ansiFormat("World",[Console::FG_GREEN]);
  Console::output("{$hello} {$world}");
}

Console::ansiFormat能够为字符串减少更多样式。

关键在于 ansiFormat 的第二个参数,这是一个数组,除了能传递 FG_结尾的前景色,还能传递 BG_结尾的背景色,也就是说咱们岂但能扭转字体的色彩,还能加背景,比方接下来的这行代码

$hello = Console::ansiFormat("Hello",[Console::FG_YELLOW,Console::BG_BLUE]);

看图谈话

那么 Console 一共反对多少种前景色和背景色那?

  • 前景色 FG_BLACK / FG_RED / FG_GREEN / FG_YELLOW / FG_BLUE / FG_PURPLE / FG_CYAN / FG_GREY
  • 背景色 BG_BLACK / BG_RED / BG_GREEN / BG_YELLOW / BG_BLUE / BG_PURPLE / BG_CYAN / BG_GREY

哥,内容能加粗么?

必须的了,你认为就是色彩么?上面把其余款式再说下,比方加粗、斜体等等,看代码

Console::output(Console::ansiFormat("normal",[Console::NORMAL]));
Console::output(Console::ansiFormat("bold",[Console::BOLD]));
Console::output(Console::ansiFormat("italic",[Console::ITALIC]));
Console::output(Console::ansiFormat("underline",[Console::UNDERLINE]));
Console::output(Console::ansiFormat("negative",[Console::NEGATIVE]));

如果你的英文不达标能够看效果图

我想得到用户输出的

没错,这是一个程序最根本的性能,Console 当然也能够,就像上面的程序,咱们让用户输出名字,而后再输入。

$name = Console::input("请输出你的名字:");

$formatName = Console::ansiFormat($name,[Console::FG_YELLOW]);
Console::output("你的名字是:{$formatName}");

Console::input,还能增加提醒语,看看后果是不是很乏味。

用户写太危险,我要他抉择。

你说的有情理,你是要用户进行单选题是吧,比方性别等。

$sex = Console::select("性别:",[1=>'男',2=>'女']);

$formatSex = Console::ansiFormat($sex,[Console::FG_YELLOW]);
Console::output("你的性别是:{$formatSex}");

Console::select 施展着小魔法

YES OR NO

让你抉择 yes 还是 no,这种状况在咱们应用命令行装置货色的时候常常遇到,用 yii2 的 Console 如何实现这样的需要那?只须要一个 Console::confirm 办法。

if (Console::confirm("Are you sure?")) {Console::output("user input yes");
}else{Console::output("user input no");
}

哇哦,逻辑判断又进去了,Console 帮你实现着计算机软件的逻辑。

聪慧的你肯定发现了吧,如果你不输出间接回车则在下面的代码中示意你抉择了 no,具体是 yes 还是 no 取决于 confirm 的第二个参数是 true 还是 false。

还有更你 x 的么?

那就说一个,下面咱们说了用户输出是不靠谱的,因而 Console 也提供了一个验证办法,看代码

Console::prompt("你的名字",['required'=>true,'error'=>'必须输出']);

prompt 很像 yii2 中 ar 的 rules 办法,对每个输出进行验证,通过能力持续上面的代码,比方下面的代码是说 必须填写,否则抛出错误信息并让你持续输出

对于 prompt 办法次要是第二个参数进行限度,这是一个数组类型的参数,外面的值为

  • required 虚实,是否必须填写
  • default 默认值
  • pattern 正则匹配
  • validator 自定义验证函数
  • error 错误信息

够弱小的了吧。

最初一个巨牛逼的

为了亮瞎你的眼,我感觉先上效果图

帅气吧,你在 linux 零碎上应该不止一次看到它吧,用 Console 也能够轻松实现

Console::startProgress(0, 1000);
for ($n = 1; $n <= 1000; $n++) {usleep(1000);
    Console::updateProgress($n, 1000);

}
Console::endProgress();

startProgress、updateProgress、endProgress。

三个你一眼能够看懂的函数就能够搞定,具体什么时候应用,施展你弱小的想象力吧。

小结

如许乏味的 Console 类, 当然其实还有很多小办法,比方清空命令行,屏幕尺寸、字符串长度等等,总之你的控制台离不开它。

退出移动版