corneltek / getoptionkit
强大的命令行选项工具包
2.7.2
2023-04-14 03:35 UTC
Requires
- php: >=7.2.0
Requires (Dev)
- phpunit/phpunit: ^8.0 || ^9.0
- dev-master / 2.7.x-dev
- 2.7.2
- 2.7.1
- 2.7.0
- 2.6.1
- 2.6.0
- 2.5.4
- 2.5.3
- 2.5.2
- 2.5.1
- 2.5.0
- 2.4.0
- 2.3.0
- 2.2.7
- 2.2.6
- 2.2.5
- 2.2.4
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.1
- 2.1.0
- 2.0.12
- 2.0.11
- 2.0.10
- 2.0.9
- 2.0.8
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- dev-add_split_extra_arg
This package is auto-updated.
Last update: 2024-09-14 08:53:21 UTC
README
代码质量
版本 & 统计
一个强大的PHP选项解析工具包,支持类型约束、标志、多个标志、多个值和必填值检查。
GetOptionKit支持PHP5.3,并使用PHPUnit测试框架进行精细的单元测试。
GetOptionKit是面向对象的,它灵活且可扩展。
为PHPBrew https://github.com/phpbrew/phpbrew,CLIFramework https://github.com/c9s/CLIFramework 和 AssetKit https://github.com/c9s/AssetKit 提供支持
功能
- 简单格式。
- 类型约束。
- 多值、必填值、可选值检查。
- 从定义的选项自动生成帮助文本。
- 支持应用程序/子命令选项解析。
- 选项值验证器
- 选项建议
- SPL库。
- HHVM支持。
要求
- PHP 5.3+
从Composer安装
composer require corneltek/getoptionkit
支持的选项格式
简单标志
program.php -a -b -c
program.php -abc
program.php -vvv # incremental flag v=3
program.php -a -bc
具有多个值
program.php -a foo -a bar -a zoo -b -b -b
使用等号指定值
program.php -a=foo program.php --long=foo
使用常规参数
program.php -a=foo -b=bar arg1 arg2 arg3
program.php arg1 arg2 arg3 -a=foo -b=bar
选项规范
v|verbose flag option (with boolean value true)
d|dir: option require a value (MUST require)
d|dir+ option with multiple values.
d|dir? option with optional value
dir:=string option with type constraint of string
dir:=number option with type constraint of number
dir:=file option with type constraint of file
dir:=date option with type constraint of date
dir:=boolean option with type constraint of boolean
d single character only option
dir long option name
命令行表单
app [app-opts] [app arguments]
app [app-opts] subcommand [subcommand-opts] [subcommand-args]
app [app-opts] subcmd1 [subcmd-opts1] subcmd2 [subcmd-opts] subcmd3 [subcmd-opts3] [subcommand arguments....]
文档
在文档中查看更多详细信息
示例
请检查examples/demo.php
。
运行
% php examples/demo.php -f test -b 123 -b 333
打印
* Available options:
-f, --foo <value> option requires a value.
-b, --bar <value>+ option with multiple value.
-z, --zoo [<value>] option with optional value.
-v, --verbose verbose message.
-d, --debug debug message.
--long long option name only.
-s short option name only.
Enabled options:
* key:foo spec:-f, --foo <value> desc:option requires a value.
value => test
* key:bar spec:-b, --bar <value>+ desc:option with multiple value.
Array
(
[0] => 123
[1] => 333
)
概要
use GetOptionKit\OptionCollection; use GetOptionKit\OptionParser; use GetOptionKit\OptionPrinter\ConsoleOptionPrinter; $specs = new OptionCollection; $specs->add('f|foo:', 'option requires a value.' ) ->isa('String'); $specs->add('b|bar+', 'option with multiple value.' ) ->isa('Number'); $specs->add('ip+', 'Ip constraint' ) ->isa('Ip'); $specs->add('email+', 'Email address constraint' ) ->isa('Email'); $specs->add('z|zoo?', 'option with optional value.' ) ->isa('Boolean'); $specs->add('file:', 'option value should be a file.' ) ->isa('File'); $specs->add('v|verbose', 'verbose message.' ); $specs->add('d|debug', 'debug message.' ); $specs->add('long', 'long option name only.' ); $specs->add('s', 'short option name only.' ); $printer = new ConsoleOptionPrinter(); echo $printer->render($specs); $parser = new OptionParser($specs); echo "Enabled options: \n"; try { $result = $parser->parse( $argv ); foreach ($result->keys as $key => $spec) { print_r($spec); } $opt = $result->keys['foo']; // return the option object. $str = $result->keys['foo']->value; // return the option value print_r($opt); var_dump($str); } catch( Exception $e ) { echo $e->getMessage(); }
文档
有关更多详细信息,请参阅https://github.com/c9s/GetOptionKit/wiki
选项值类型
选项值类型帮助您验证输入,以下列表是当前支持的类型
字符串
数字
布尔值
文件
日期
网址
电子邮件
IP
IPv4
IPv6
正则表达式
以下是与这些类型相关的示例代码
$opt->add( 'f|foo:' , 'with string type value' ) ->isa('string'); $opt->add( 'b|bar+' , 'with number type value' ) ->isa('number'); $opt->add( 'z|zoo?' , 'with boolean type value' ) ->isa('boolean'); $opt->add( 'file:' , 'with file type value' ) ->isa('file'); $opt->add( 'date:' , 'with date type value' ) ->isa('date'); $opt->add( 'url:' , 'with url type value' ) ->isa('url'); $opt->add( 'email:' , 'with email type value' ) ->isa('email'); $opt->add( 'ip:' , 'with ip(v4/v6) type value' ) ->isa('ip'); $opt->add( 'ipv4:' , 'with ipv4 type value' ) ->isa('ipv4'); $opt->add( 'ipv6:' , 'with ipv6 type value' ) ->isa('ipv6'); $specs->add('r|regex:', 'with custom regex type value') ->isa('Regex', '/^([a-z]+)$/');
请注意,目前只能验证
string
、number
和boolean
类型。
ContinuousOptionParser
$specs = new OptionCollection; $spec_verbose = $specs->add('v|verbose'); $spec_color = $specs->add('c|color'); $spec_debug = $specs->add('d|debug'); $spec_verbose->description = 'verbose flag'; // ContinuousOptionParser $parser = new ContinuousOptionParser( $specs ); $result = $parser->parse(explode(' ','program -v -d test -a -b -c subcommand -e -f -g subcommand2')); $result2 = $parser->continueParse();
OptionPrinter
GetOptionKit\OptionPrinter可以为您打印选项
* Available options:
-f, --foo option requires a value.
-b, --bar option with multiple value.
-z, --zoo option with optional value.
-v, --verbose verbose message.
-d, --debug debug message.
--long long option name only.
-s short option name only.
具有子命令的命令行应用程序
对于具有子命令的应用程序,设计如下
[app name] [app opts]
[subcommand1] [subcommand-opts]
[subcommand2] [subcommand-opts]
[subcommand3] [subcommand-opts]
[arguments]
您可以在tests/GetOptionKit/ContinuousOptionParserTest.php
单元测试文件中进行检查
// subcommand stack $subcommands = array('subcommand1','subcommand2','subcommand3'); // different command has its own options $subcommandSpecs = array( 'subcommand1' => $cmdspecs, 'subcommand2' => $cmdspecs, 'subcommand3' => $cmdspecs, ); // for saved options $subcommandOptions = array(); // command arguments $arguments = array(); $argv = explode(' ','program -v -d -c subcommand1 -a -b -c subcommand2 -c subcommand3 arg1 arg2 arg3'); // parse application options first $parser = new ContinuousOptionParser( $appspecs ); $app_options = $parser->parse( $argv ); while (! $parser->isEnd()) { if (@$subcommands[0] && $parser->getCurrentArgument() == $subcommands[0]) { $parser->advance(); $subcommand = array_shift( $subcommands ); $parser->setSpecs( $subcommandSpecs[$subcommand] ); $subcommandOptions[ $subcommand ] = $parser->continueParse(); } else { $arguments[] = $parser->advance(); } }
待办事项
- 选项规范组。
- 选项有效值检查。
- 自定义命令映射。
命令行实用工具设计概念
- 主程序名称应该容易输入,容易记住。
- 子命令应该容易输入,容易记住。长度应短于7个字符。
- 选项应始终具有长描述性名称
- 程序应易于检查用法。
通用命令接口
列出所有子命令或程序本身的用法
$ prog help
列出子命令的用法
$ prog help subcommand subcommand2 subcommand3
黑客
分叉此存储库并克隆它
$ git clone git://github.com/c9s/GetOptionKit.git
$ cd GetOptionKit
$ composer install
运行PHPUnit进行测试
$ phpunit
许可证
本项目采用MIT许可证发布。