66
77简洁、功能全面的php命令行应用库。提供控制台参数解析, 命令运行,颜色风格输出, 用户信息交互, 特殊格式信息显示。
88
9- > 无其他库依赖,可以方便的整合到任何已有项目中。
9+ > 使用方便简单。 无其他库依赖,可以方便的整合到任何已有项目中。
1010
1111- 命令行应用, 命令行的 ` controller ` , ` command ` 解析运行, 支持给命令设置别名
1212- 功能全面的命令行的选项参数解析(命名参数,短选项,长选项 ...)
1313- 命令行中功能强大的 ` input ` , ` output ` 管理、使用
14- - 内置了Phar工具类,可以方便的将应用打包成 ` phar ` 文件(运行示例中 ` php examples/app phar:pack ` , 会将console库打包成一个` app.phar ` )
15- - 消息文本的多种颜色风格输出支持(` info ` , ` comment ` , ` success ` , ` danger ` , ` error ` ... ...)
16- - 丰富的特殊格式信息显示(` section ` , ` panel ` , ` padding ` , ` help-panel ` , ` table ` , ` title ` , ` list ` , ` multiList ` , ` progressBar ` )
14+ - 命令方法注释自动解析为帮助信息(默认提取 ` @usage ` ` @arguments ` ` @options ` ` @example ` 等信息)
15+ - 支持输出多种颜色风格的消息文本(` info ` , ` comment ` , ` success ` , ` warning ` , ` danger ` , ` error ` ... )
16+ - 常用的特殊格式信息显示(` section ` , ` panel ` , ` padding ` , ` helpPanel ` , ` table ` , ` tree ` , ` title ` , ` list ` , ` multiList ` )
17+ - 丰富的动态信息显示(` pending/loading ` , ` pointing ` , ` spinner ` , ` counterTxt ` , ` progressTxt ` , ` progressBar ` )
1718- 常用的用户信息交互支持(` select ` , ` multiSelect ` , ` confirm ` , ` ask/question ` , ` askPassword/askHiddenInput ` )
18- - 命令方法注释自动解析为帮助信息(提取为参数 ` arguments ` 和 选项 ` options ` 等信息)
19- - 支持类似 ` symfony/console ` 的预定义参数定义(按位置赋予参数值)
20- - 输出是 windows,linux 兼容的,不支持颜色的环境会自动去除相关CODE
19+ - 支持类似 ` symfony/console ` 的预定义参数定义(按位置赋予参数值, 需要严格限制参数选项时推荐使用)
20+ - 输出是 ` windows ` , ` linux ` 兼容的,不支持颜色的环境会自动去除相关CODE
2121
2222> 下面所有的特性,效果都是运行 ` examples/ ` 中的示例代码 ` php examples/app ` 展示出来的。可以直接测试运行
2323
24+ ** 内置的有趣工具**
25+
26+ - 内置了Phar工具类,可以方便的将应用打包成` phar ` 文件(运行示例 ` php examples/app phar:pack ` ,会将console库打包成一个` app.phar ` )
27+ - ` ArtFont::class ` 支持 ansi 图案字体显示(运行 ` php examples/app -V ` 可以看到效果)
28+ - ` Download::class ` 内置的简单的文件下载工具类,带有进度条
29+ - ` Terminal::class ` 简单的Terminal屏幕、光标控制操作类
30+ - ** TODO** 快速的为当前应用生成 ` bash/zsh ` 环境下的自动补全脚本
31+
2432## [ EN README] ( ./README_en.md )
2533
2634## 项目地址
@@ -77,6 +85,7 @@ $meta = [
7785];
7886$input = new Input;
7987$output = new Output;
88+ // 通常无需传入 $input $output ,会自动创建
8089$app = new Application($meta, $input, $output);
8190
8291// add command routes
@@ -95,9 +104,7 @@ $app->run();
95104
96105![ 'app-command-list'] ( docs/screenshots/app-command-list.png )
97106
98- > ` Independent Commands ` 中的 demo 就是我们上面添加的命令
99-
100- - ` [alias: ...] ` 命令最后的alias 表明了此命令拥有的别名。
107+ > ` Alone Commands ` 中的 demo 就是我们上面添加的命令
101108
102109## 添加命令
103110
@@ -135,7 +142,7 @@ class TestCommand extends Command
135142 // 命令描述
136143 protected static $description = 'this is a test independent command';
137144
138- // 注释中的 @usage @arguments @options 在使用 帮助命令时,会被解析并显示出来
145+ // 注释中的 @usage @arguments @options @example 在使用 帮助命令时,会被解析并显示出来
139146
140147 /**
141148 * @usage usage message
@@ -156,18 +163,9 @@ class TestCommand extends Command
156163}
157164```
158165
159- - 注册命令
160-
161- 在 ` $app->run() ` 之前通过 ` $app->command('test', TestCommand::class) ` 注册独立命令。
162-
163- ``` php
164- $app->command(TestCommand::class);
165- // OR 设置了命令名称,将会覆盖类里面设置的
166- // $app->command('test1', TestCommand::class);
167- ```
168-
169166### 命令组
170167
168+ 当一些命令相关性较大时,写在同一个文件里更方便阅读和管理。
171169通过继承 ` Inhere\Console\Controller ` 添加一组命令. 即是命令行的控制器
172170
173171``` php
@@ -178,7 +176,9 @@ use Inhere\Console\Controller;
178176 */
179177class HomeController extends Controller
180178{
179+ // 命令组名称
181180 protected static $name = 'home';
181+ // 命令组描述
182182 protected static $description = 'default command controller. there are some command usage examples';
183183
184184 /**
@@ -211,34 +211,48 @@ class HomeController extends Controller
211211}
212212```
213213
214- 注册命令,在 ` $app->run() ` 之前通过 ` $app->controller(HomeController::class) ` 注册命令组。
214+ ### 注册命令
215+
216+ 在 ` $app->run() ` 之前
217+
218+ - 通过 ` $app->command(TestCommand::class) ` 注册独立命令。
219+ - 通过 ` $app->controller(HomeController::class) ` 注册命令组。
220+
221+ ``` php
222+ $app->command(TestCommand::class);
223+ // OR 设置了命令名称,将会覆盖类里面设置的
224+ // $app->command('test1', TestCommand::class);
225+ ```
226+
227+ - 自动扫描注册
228+
229+ 手动注册太麻烦! 可以配置命名空间和对应的路径来,将会自动扫描并注册命令。
215230
216- ** 说明:**
231+ ``` php
232+ // 独立命令
233+ $app->registerCommands('App\\Console\\Commands', dirname(__DIR__) . '/Commands');
234+ // 命令组
235+ $app->registerGroups('App\\Console\\Controllers', dirname(__DIR__) . '/Controllers');
236+ ```
217237
218- 命令组(eg ` HomeController ` ) 中的命令(eg: ` indexCommand ` )上注释是可被解析的。
238+ ** 一些说明: **
219239
220- - 支持的tag有 ` @usage ` ` @arguments ` ` @options ` ` @example `
240+ 命令上的注释是可被解析的
241+
242+ - 注释中的 ` @usage ` ` @arguments ` ` @options ` ` @example ` 在使用帮助命令时,会被解析并显示出来
243+ - 注释里面同样支持带颜色的文本输出 ` eg: this is a command's description <info>message</info> `
244+ - 上诉tag注释里,支持变量替换(例如: ` {command} ` 会自动替换为当前输入的命令)
221245- 当你使用 ` php examples/app home -h ` 时,可以查看到 ` HomeController ` 的所有命令描述注释信息
222246
223247 ![ group-command-list] ( docs/screenshots/group-command-list.png )
224248- 当使用 ` php examples/app home:test -h ` 时,可以查看到关于 ` HomeController::testCommand ` 更详细的信息。包括描述注释文本、` @usage ` 、` @example `
225249
226250 ![ group-command-list] ( docs/screenshots/command-help.png )
227251
228- > 小提示:注释里面同样支持带颜色的文本输出 ` eg: this is a command's description <info>message</info> `
229-
252+ - 看到一些命令最后的 ` [alias: ...] ` 了吗,那是此命令拥有的别名. 即用别名也可以访问它,当一个命令太长时可以加别名方便使用
230253
231254更多请查看 [ examples] ( ./examples ) 中的示例代码和在目录下运行示例 ` php examples/app ` 来查看效果
232255
233- ### 自动扫描注册
234-
235- 可以配置命名空间和对应的路径来,自动扫描并注册命令。
236-
237- ``` php
238- $app->registerCommands('App\\Console\\Commands', get_path('app/Console/Commands'));
239- $app->registerGroups('App\\Console\\Controllers', get_path('app/Console/Controllers'));
240- ```
241-
242256## 输入
243257
244258> 输入对象是 ` Inhere\Console\IO\Input ` 的实例
0 commit comments