首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

3分钟短文:有趣的Laravel命令行交互,输入和输出!

引言

上一期我们详细演示了laravel生成的命令行的参数和选项的区别。然而数据获取的方式有很多,还有一些命令行应用程序,需要我们在程序执行的过程中,实时地获取用户的输入值。

并且,一个好的系统,是不可能没有输出提示信息的。所以本期我们就来说说,过程中的输入和输出。

代码时间

比如在代码中,要求实时获取用的名字,并一直等待用户的输入:

$email=$this->ask('What is your email address?');

laravel Command 的ask方法就是专门用来收集数据的。对于敏感数据我们不想让其在数据库命令行上显示,laravel也提供了类似 bash 中read -s的隐藏输入字符的功能:

$password=$this->secret('What is the password?');

如果要让用户选择是否确认进行下一步操作,那么使用confirm方法就可以了:

if($this->confirm('Do you want to truncate the tables?')) {}

输入信息有时候我们想做一些自动补全提示的功能,可以使用anticipate方法:

$name=$this->anticipate('What is your name?', ['Tom','Hanks']);

同时该方法还接收用于的自由输入,可以选择使用给定的补全项,也可以使用自己输入的内容。如果我们可以枚举一个输入值,那就让用户只能在某一系列值的范围内搜索,可以使用choice方法达成:

$winner=$this->choice('Who is the best football team?',['Gators','Wolverines'],);

第一个参数是提示文本,第二个参数传入一个数组,为可选择的一列值,第三个参数则是默认选中的那个值在数组内的索引位置。

当然如果你觉得输入0,1,2,3这样的序列化数字实在是太累了,也可以为数组传入关联值:

$winner=$this->choice('Who is the best football team?',['gators'=>'Gators','wolverines'=>'Wolverines'],'gators');

标准输出

在命令行上输出一条带中断提示颜色的信息很容易,调用 Command 的 info 方法:

$this->info('Your command has run successfully.');

在linux终端内,这是一条绿色文本的输出信息。相对应地,其他方法的返回色值:

comment 橘色

question 高亮的蓝绿色

error 高亮的红色

line 本色输出,没有着色

在linux下工作的同学,应该很容易想到这就是bash中断着色的那些配置变量PS1,PS2。只不过,laravel使用PHP程序调用并按照中断着色规则进行了文本包裹。

你有没有想过,中断能否像MySQL的中断那样,按照行列的对齐方式,输出一个类似表格的数据。laravel提供了这个能力,就是table功能。先准备好数据:

然后使用table方法输出到命令行:

$this->table($headers,$data);

ASCII字符的输出结果,大概如下:

是不是直观多了,好看多了?

还有一个更人性化的需求,比如做任务,循环很多次,我们如何整体把握一下该进度的百分比呢?在命令行上有一个进度条就完美了。laravel想你所想,它提供了。

来看一段代码:

$totalUnits=10;

$this->output->progressStart($totalUnits);

for($i=;$i

 sleep(1);

 $this->output->progressAdvance();

}

$this->output->progressFinish();

上面简单演示了一个进度的过程。我们简单做个测试,来看一下输出:

3/10[========>-------------------]  30%

动态输出让命令行一下子有趣起来了,不是吗?

写在最后

本文对命令行中采集的用户输入信息和方式,还有人性化的输入内容进行了简介,制作一个命令行程序变得非常有趣了。

Happy coding :-)

我是@程序员小助手,持续分享编程知识,欢迎关注。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200917A0EY2P00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券