ThinkPHP5.1 交互式命令
2023/5/13 23:22:08
本文主要是介绍ThinkPHP5.1 交互式命令,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言:
在平时项目中,有时需要对某些业务进行批处理,比如为了版本兼容,或者不同系统的数据同步等场景下,我们会选择自定义一些指令定时或即时的执行。
但是有很多命令需要读表,随着定义的指令逐渐变多,模型里本不涉及业务性的方法也越积越多,甚至某些指令删除了,但是对应的模型方法还在。所以为了不影响业务代码,我们会临时起一个项目专门作为指令处理。但还是有一个问题的是,因为还是以框架新启的项目,自然里面的那些控制器,路由,配置项加载其实并不需要。
于是我就想参考框架的 console 单独写一个指令集,当看了代码后,发现了一个我们平时很少用到的交互式输出,也就是输出带着问题。其实在很多带有控制台的软件中很常见,比如一些脚手架或包管理器安装前的询问。以下就大概介绍一些 Tp 控制台的大致运行流程和交互式输出的使用。
流程:
- think 文件
这个就是 TP 命令执行 (php think command) 的入口文件,其实也是一个 PHP 文件。
- think\Console.php
自定义指令和配置的载入,控制台输入和输出的实例化和运行的转发
- Output.php
其他的文件后期再总结,这里主要介绍一下输出的内容样式 (颜色,背景,字体) 和交互式输出,因为这两个东西在 TP 框架文档中很少几乎没有提起并且有点炫。
输出:
- 控制台输出的颜色背景设置
框架中背景设置可以在后面带上 --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). 分析
\033 [% sm 代表开始设置标签,多个标签用分号;分隔
% s 表示要设置的字体
\033 [% sm 代表设置完成标签
(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 显示光标
- 交互式控制台
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, "你确定要走下一步操作吗?");
这篇关于ThinkPHP5.1 交互式命令的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-19php8的协程和hyperf的协程有什么区别?-icode9专业技术文章分享
- 2024-12-19php8 的fiber是什么?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-11-29使用PHP 将ETH账户的资产汇集到一个账户
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享