并且,一个好的系统,是不可能没有输出提示信息的。以是本期我们就来说说, 过程中的输入和输出。
代码韶光比如在代码中,哀求实时获取用的名字,并一贯等待用户的输入:
$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 :-)
我是@程序员小助手,持续分享编程知识,欢迎关注。