之因此放到此专栏主要是该文章对咱们学习yii2-queue有很大帮助。php
咱们常常使用yii2开发命令行应用,也会遇到好比让用户在命令行输入信息、选择等操做,今天为你们介绍的这个yii2的Console类轻松的帮你搞定这件事情,有了它,你的命令行应用将更加高逼格。linux
为了学习更简单,咱们用问答的形式开始。数组
Console是yii2的一个帮助类,所在文件夹为 /vendor/yiisoft/yii2/helpers,里面有 BaseConsole 和 Console ,Console类继承于BaseConsole,BaseConsole不容许被调用,所以咱们都是使用Console类。yii2
在代码里要使用套路yii
use yii\helpers\Console;
...
Console::xxxx()
复制代码
当咱们开发yii2的控制台应用的时候,能够echo一个字符串,这样命令行会显示,那么用Console如何实现那?看代码函数
public function actionIndex() {
Console::output(“Hello World”);
}
复制代码
对,用Console::output,你可能会说,“这尚未echo简单那?”,那么咱们接着看。学习
我如今想让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能够为字符串增长更多样式。ui
关键在于ansiFormat的第二个参数,这是一个数组,除了能传递FG_开头的前景色,还能传递BG_开头的背景色,也就是说咱们不但能改变字体的颜色,还能加背景,好比接下来的这行代码spa
$hello = Console::ansiFormat("Hello",[Console::FG_YELLOW,Console::BG_BLUE]);
复制代码
看图说话
那么Console一共支持多少种前景色和背景色那?
必须的了,你觉得就是颜色么?下面把其余样式再说下,好比加粗、斜体等等,看代码
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仍是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。
那就说一个,上面咱们说了用户输入是不靠谱的,所以Console也提供了一个验证方法,看代码
Console::prompt("你的名字",['required'=>true,'error'=>'必须输入']);
复制代码
prompt很像yii2中ar的rules方法,对每一个输入进行验证,经过才能继续下面的代码,好比上面的代码是说必须填写,不然抛出错误信息并让你继续输入
关于prompt方法主要是第二个参数进行限制,这是一个数组类型的参数,里面的值为
够强大的了吧。
为了亮瞎你的眼,我以为先上效果图
帅气吧,你在linux系统上应该不止一次看到它吧,用Console也能够轻松实现
Console::startProgress(0, 1000);
for ($n = 1; $n <= 1000; $n++) {
usleep(1000);
Console::updateProgress($n, 1000);
}
Console::endProgress();
复制代码
startProgress、updateProgress、endProgress。
三个你一眼能够看懂的函数就能够搞定,具体何时使用,发挥你强大的想象力吧。
多么有趣的Console类,固然其实还有不少小方法,好比清空命令行,屏幕尺寸、字符串长度等等,总之你的控制台离不开它。
阿北的知识分享 https://nai8.me