-
Notifications
You must be signed in to change notification settings - Fork 49
v3 upgrade to v4
Inhere edited this page Oct 16, 2021
·
8 revisions
- PHP 版本需要
7.3+
大部分都是兼容的,唯有选项参数的解析、绑定变动较大。之前获取输入参数、选项都是通过 Input 对象,v4 重构了选项参数的解析。
- 提供了新的
FlagsParser
对象来解析和管理输入的选项参数。 - 使用上更加简单易用
- 废弃了之前的
InputDefinition
对象 - 废弃了之前的
Input
对象上的各种getXXXOpt()
getXXXArg()
方法
- 废弃了之前的
- 方法注释的
@options
@arguments
功能增强- 使用
;
分割各个设置项,完整规则格式type;desc;required;default;shorts
- 支持设置数据类型,不设置默认为
string
- 支持设置是否必须
required
等等
- 使用
- 只需通过
FlagsParser $fs
的getOpt()
getArg()
获取选项、参数值- 输入的值在解析绑定时就已经根据设置的类型自动格式化了
- 不在需要原来的通过
input->getXXXOpt()
等各种手动格式化类型的方法
升级改动说明:
- 将原来的
$input->getXXXOpt()
替换为$fs->getOpt()
- 将原来的
$input->getXXXArg()
替换为$fs->getArg()
- 方法上的
@options
@arguments
注释内容会被严格解析,因此名称和后面的规则至少需要间隔两个空格
v4示例 - 通过注释绑定选项参数:
/**
* show next execution datetime for an cron expression.
*
* @arguments
* expression string;The cronTab expression. eg: `20 10 * * *`;required
*
* @options
* -n, --next int;Show next number exec datetime. default number is 3.
* -p, --prev bool;Show previsions exec datetime
*
* @param FlagsParser $fs
* @param Output $output
*
* @throws Exception
*/
public function someCommand(FlagsParser $fs, Output $output): void
{
$expr = $fs->getArg('expression'); // will get string value
$prev = $fs->getOpt('prev'); // will get bool value
$nextNum = $fs->getOpt('next', 3); // will get int value
$output->colored('Cron Expression: ' . $expr);
}
v4示例 - 通过注释绑定选项参数:
/**
* Configure for the subcommand `some`
*/
protected function someConfigure(): void
{
// 在独立命令里
// $fs = $this->getFlags();
// 在group的子命令里
$fs = $this->getActionFlags();
$fs->addArg('topic', 'The language/topic for search. eg: go, php, java, lua, python, js ...');
$fs->addArg('question', 'The question search.');
$fs->addOpt('search', 's', 'search by the keywords');
// $fs->addOpt('T', 't', 'query');
$fs->setMoreHelp(<<<HELP
<b>Special pages</b>
There are several special pages that are not cheat sheets. Their names start with colon and have special meaning.
.... ...
HELP
);
$fs->setExampleHelp([
'{fullCmd} go reverse list'
]);
}
我的其他PHP项目
- inhere/kite 方便本地开发和使用的个人CLI工具应用
- php-toolkit/pflag PHP编写的,通用的命令行标志(选项和参数)解析库
- phppkg/easytpl 使用简单且快速的 PHP 模板引擎
- inhere/php-validate 一个简洁小巧且功能完善的php验证库
- inhere/sroute 轻量且快速的HTTP请求路由库