之所以放到此专栏主要是该文章对我们学习 yii2-queue 有很大帮助
我们经常使用 yii2 开发命令行应用, 也会遇到比如让用户在命令行输入信息选择等操作, 今天为大家介绍的这个 yii2 的 Console 类轻松的帮你搞定这件事情, 有了它, 你的命令行应用将更加高逼格
为了学习更简单, 我们用问答的形式开始
Console 是 yii2 的一个帮助类, 所在文件夹为 /vendor/yiisoft/yii2/helpers, 里面有 BaseConsole 和 Console ,Console 类继承于 BaseConsole,BaseConsole 不允许被调用, 因此我们都是使用 Console 类
在代码里要使用套路
- use yii\helpers\Console;
- ...
- 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();
- startProgressupdateProgressendProgress
三个你一眼可以看懂的函数就可以搞定, 具体什么时候使用, 发挥你强大的想象力吧
小结
多么有趣的 Console 类, 当然其实还有很多小方法, 比如清空命令行, 屏幕尺寸字符串长度等等, 总之你的控制台离不开它
来源: https://juejin.im/post/5a916daef265da4e95190050