共计 1784 个字符,预计需要花费 5 分钟才能阅读完成。
前言:
在平时我的项目中,有时须要对某些业务进行批处理,比方为了版本兼容,或者不同零碎的数据同步等场景下,咱们会抉择自定义一些指令定时或即时的执行。
然而有很多命令须要读表,随着定义的指令逐步变多,模型里本不波及业务性的办法也越积越多,甚至某些指令删除了,然而对应的模型办法还在。所以为了不影响业务代码,咱们会长期起一个我的项目专门作为指令解决。但还是有一个问题的是,因为还是以框架新启的我的项目,天然外面的那些控制器,路由,配置项加载其实并不需要。
于是我就想参考框架的 console 独自写一个指令集,当看了代码后,发现了一个咱们平时很少用到的交互式输入,也就是输入带着问题。其实在很多带有控制台的软件中很常见,比方一些脚手架或包管理器装置前的询问。以下就大略介绍一些 Tp 控制台的大抵运行流程和交互式输入的应用。
流程:
1.think
文件这个就是 TP 命令执行 (php think command) 的入口文件,其实也是一个 PHP 文件。
2.think\Console.php
自定义指令和配置的载入,控制台输出和输入的实例化和运行的转发
3.Output.php
其余的文件前期再总结,这里次要介绍一下输入的内容款式 (色彩,背景,字体) 和交互式输入,因为这两个货色在 TP 框架文档中很少简直没有提起并且有点炫。
输入:
1. 控制台输入的色彩背景设置
框架中背景设置能够在前面带上 –ansi,并且通过 info, error, warning 等办法。而 Tp 的款式设置是进行了封装,能够在 output/driver/Console.php 的 write 办法查看,output/formatter/Style.php 的 apply 办法就是通过 ANSI 管制码实现对控制台色彩的设置。
sprintf("\033[%sm%s\033[%sm", implode(';', $setCodes), $text, implode(';', $unsetCodes));
(1). 剖析
(2). 拆分示例
echo "\033[31;44;4m 如果,全世界我认为能够遗记,歌词哈~\r\n\033[39;49;24m";
右边中括号起,分号第一个是字体色彩开始值,第二个背景色开始值,第三个字体款式,左边中括号的完结值。
(3). ANSI 管制码 QUOTE:
/033[0m 敞开所有属性
/033[1m 设置高亮度
/03[4m 下划线
/033[5m 闪动
/033[7m 反显
/033[8m 消隐
/033[30m – /033[37m 设置前景色
/033[40m – /033[47m 设置背景色
/033[nA 光标上移 n 行
/03[nB 光标下移 n 行
/033[nC 光标右移 n 行
/033[nD 光标左移 n 行
/033[y;xH 设置光标地位
/033[2J 清屏
/033[K 革除从光标到行尾的内容
/033[s 保留光标地位
/033[u 复原光标地位
/033[?25l 暗藏光标
/33[?25h 显示光标
2. 交互式控制台
Output 类除了罕用的款式性输入和 write 外还有 ask,confirm 等交互式输入,以下是该性能实现的 UML
(1). 一问一答 ask 办法第一个参数输出实例,第二个问题,第三个是默认值,第四个自行定义的校验器 (闭包),接管一个交互输入,能够通过谬误次数让问题连续。$output->ask($input, “ 你当初在哪里 ”, “”, function ($selected) use ($output) {
if ($selected != “ 江南 ”) {
$output->info("答复谬误");
} else {
$output->info("{$selected} 答复正确");
}
});
(2). 选项式
能够定义多个答案,这个有自带的校验器,代码见 output\question\Choice.php 中的 getDefaultValidator 办法。第一个参输出实例,第二个问题,第三个问题选项,第四个默认项。$output->choice($input, “ 请抉择王者上面的几个英雄 ”, [“ 典韦 ”, “ 赵云 ”, “ 亚瑟 ”, “ 王昭君 ”], “ 亚瑟 ”);
(3). 确认式通过询问 yes or no 形式的交互输入,第一个参输出实例,第二个问题。$output->confirm($input, “ 你确定要走下一步操作吗?”);