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);
第一个参数是提示文本,第二个参数传入一个数组,为可选择的一列值,第三个参数则是默认选中的那个值在数组内的索引位置。
当然如果你觉得输入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功能。先准备好数据:
$headers = ['Name', 'Email'];
$data = [['Dhriti', 'dhriti@amrit.com'],['Moses', 'moses@gutierez.com']];
然后使用table方法输出到命令行:
$this->table($headers, $data);
ASCII字符的输出结果,大概如下:
+---------+--------------------+
| Name | Email |
+---------+--------------------+
| Dhriti | dhriti@amrit.com |
| Moses | moses@gutierez.com |
+---------+--------------------+
是不是直观多了,好看多了?
还有一个更人性化的需求,比如做任务,循环很多次,我们如何整体把握一下该进度的百分比呢?在命令行上有一个进度条就完美了。laravel想你所想,它提供了。
来看一段代码:
$totalUnits = 10;
$this->output->progressStart($totalUnits);
for ($i = 0; $i < $totalUnits; $i++) {
sleep(1);
$this->output->progressAdvance();
}
$this->output->progressFinish();
上面简单演示了一个进度的过程。我们简单做个测试,来看一下输出:
3/10 [========>-------------------] 30%
动态输出让命令行一下子有趣起来了,不是吗?
写在最后
本文对命令行中采集的用户输入信息和方式,还有人性化的输入内容进行了简介,制作一个命令行程序变得非常有趣了。
Happy coding :-)
- CodeSmith 创建Ado.Net自定义模版(三)
- Android注解学习(2)
- Android注解学习(2)
- 机器学习之——距离度量学习
- Enterprise Library Policy Injection Application Block 之三:PIAB的扩展—创建自定义CallHandler(提供Source Code下载)
- CodeSmith 创建Ado.Net自定义模版(四)
- TensorFlow图像分类教程
- Enterprise Library Policy Injection Application Block 之一: PIAB Overview
- Python教学——第七天
- 大数据将带来电视媒体生态式变革!大数据如何深度融合电视媒体?
- Silverlight SEO优化
- Silverlight性能优化
- WCF后续之旅(6): 通过WCF Extension实现Context信息的传递
- WCF后续之旅(6): 通过WCF Extension实现Context信息的传递
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- MySQL 案例:同步中断与SQL线程类型转换
- Android端Charles抓包
- Spring boot 启动提示数据源错误
- leetcode树之从上到下打印二叉树
- 整理C/C++的可变参数
- ThingJS结合Web地图API开发,让数据展示更加出色!
- 如何分析交易记录?
- [技术创作101训练营]小程序云开发实战:从零搭建科技爱好者周刊小程序
- 【技术创作101训练营】innerHTML插入运行js字符串问题探究
- 组合体惯量法A: matlab程序—机械臂动力学建模
- vue+echarts 实现两个小例子
- 2020CV秋招求职的若干思考
- 快速学习-ElasticJob高可用
- 快速学习-Elastic调度部署
- 快速学习-ElasticJob应用API