- 
                Notifications
    
You must be signed in to change notification settings  - Fork 48
 
v3 upgrade to v4
        Inhere edited this page Oct 16, 2021 
        ·
        8 revisions
      
    - PHP 版本需要 
7.3+ 
大部分都是兼容的,唯有选项参数的解析、绑定变动较大。之前获取输入参数、选项都是通过 Input 对象,v4 重构了选项参数的解析。
- 废弃了之前的 
InputDefinition对象 - 提供了新的 
FlagsParser对象来解析和管理输入的选项参数。 - 使用上更加简单易用,
 - 方法注释的 
@options@arguments功能增强;- 支持设置数据类型,不设置默认为 
string - 支持设置是否必须 
required 
 - 支持设置数据类型,不设置默认为 
 - 只需通过 
FlagsParser的getOpt()getArg()获取选项、参数值- 输入的值在解析绑定时就已经根据设置的类型自动格式化了
 - 不在需要原来的通过 
input->getXXXOpt()等各种手动格式化类型的方法 
 
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 command
     */
    protected function configure(): 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请求路由库