首页 > 编程语言 >ThinkPHP5.1 交互式命令

ThinkPHP5.1 交互式命令

时间:2022-09-23 20:57:09浏览次数:50  
标签:输出 output 命令 交互式 ThinkPHP5.1 033 php 光标

前言:

        在平时项目中,有时需要对某些业务进行批处理,比如为了版本兼容,或者不同系统的数据同步等场景下,我们会选择自定义一些指令定时或即时的执行。

        但是有很多命令需要读表,随着定义的指令逐渐变多,模型里本不涉及业务性的方法也越积越多,甚至某些指令删除了,但是对应的模型方法还在。所以为了不影响业务代码,我们会临时起一个项目专门作为指令处理。但还是有一个问题的是,因为还是以框架新启的项目,自然里面的那些控制器,路由,配置项加载其实并不需要。

        于是我就想参考框架的 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). 分析

\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 显示光标

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, "你确定要走下一步操作吗?");

 

 

标签:输出,output,命令,交互式,ThinkPHP5.1,033,php,光标
From: https://www.cnblogs.com/zerofc/p/16724197.html

相关文章

  • 我的 Kafka 旅程 - Linux下的安装 & 基础命令
    准备工作安装解压缩工具tar#检查是否安装了解压缩工具taryumlisttar#如未安装taryuminstalltar-y安装必备的java#检查是否安装了java-openjdk,这......
  • ubuntu 服务器常用命令
    ubuntu服务器常用命令登陆ssh通过pemssh-add-kkey.pem#有可能会报以下错误Permissions0664for'key.pem'aretooopen.Itisrequiredthatyourprivatek......
  • windows常用命令
    ifconfig/all获取获取域名、IP地址、DHCP服务器、网关、MAC地址、主机名nettime/domain查看域名、时间netview/domain查看域内所有共享netviewip查看对方局......
  • GPU常用命令
    在终端执行程序时指定GPU$CUDA_VISIBLE_DEVICES=1pythonrun_file.py查看一台服务器上所有显卡上的使用者和GPU占用情况首先安装gpustatpipinstallgpustat安装......
  • 常用基本命令
    man获取帮助信息1)基本语法man[命令或配置文件]     (功能描述:获取帮助信息)2)显示说明信息功能NAME命令的名称和单行描述SYNOPSIS怎样......
  • 常用git命令
    1.命令行删除 node_modules 文件1)安装删除工具npm install rimraf -g2)执行删除命令rimraf node_modules2.更新远程分支git remote update origin --prune3.合......
  • 【Docker】Docker 基础知识及 cli 命令快查
    常用命令#显示docker信息$dockerinfo#显示容器列表$dockerps[-a]#拉取镜像$dockerpull#查看本地镜像$dockerimages#文件拷贝$dockercp......
  • 启动hbase的命令
    启动hbase的命令1.关闭三台虚拟机的防火墙systemctlstopfirewalld2.开启zookeeper节点zkServer.shstart3.开启所有集群节点start-all.sh4.开启hbasestart-hbase.sh5......
  • Linux 命令
    查看Docker当前使用的Linux版本,在PowerShell终端执行以下命令:wsl--list--running重启WSL2分发Linux,注意重启后,Docker也要跟着重启wsl--shutdown......
  • git常用命令
    1、如何克隆仓库代码到本地?命令:gitclonehttp://******2、如何创建新分支test?  命令:gitbranchtest3、查看本地分支?命令:gitbranch4、如何切换到分支test?命令......