mix/cli 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

mix/cli

Composer 安装命令:

composer require mix/cli

包简介

PHP CLI Interactive Commander

README 文档

README

OpenMix 出品:https://openmix.org

Mix CLI

PHP CLI Interactive Commander

PHP 命令行交互指挥官

go 版本:https://github.com/mix-go/xcli

Overview

一个命令行交互与指挥管理工具,它可以让单个 CLI 可执行多种功能,同时它还包括命令行参数获取、全局异常捕获与处理等命令行开发常用功能。

Installation

composer require mix/cli

Quick start

Mix\Cli\Cli::setName('app')->setVersion('0.0.0-alpha');
$cmd = new Mix\Cli\Command([
    'name' => 'hello',
    'short' => 'Echo demo', 
    'run' => function () {
        $name = Mix\Cli\Flag::match('n', 'name')->string('default');
        // do something
    }
]);
$opt = new Mix\Cli\Option([
    'names' => ['n', 'name'],
    'usage' => 'Your name'
]);
$cmd->addOption($opt);
Mix\Cli\Cli::addCommand($cmd)->run();

上面是采用闭包,也可以使用对象

class FooCommand implements Mix\Cli\RunInterface
{
    public function main(): void
    {
        // do something
    }
}
$cmd = new Mix\Cli\Command([
    'name' => 'hello',
    'short' => 'Echo demo', 
    'run' => new FooCommand(),
]);

查看整个命令行程序的帮助

$ php app.php
Usage: app.php [OPTIONS] COMMAND [ARG...]

Commands:
  hello         Echo demo

Global Options:
  -h, --help    Print usage
  -v, --version Print version information

Run 'app.php COMMAND --help' for more information on a command.

Developed with Mix PHP framework. (openmix.org/mix-php)

查看命令行程序的版本信息

$ php app.php -v
app 0.0.0-alpha

查看 hello 命令的帮助

$ php app.php hello --help
Usage: app.php hello [ARG...]

Command Options:
  -n, --name    Your name

Developed with Mix PHP framework. (openmix.org/mix-php)

执行 hello 命令

$ php app.php hello

Flag 参数获取

参数规则 (部分UNIX风格+GNU风格)

php /examples/app.php home -d -rf --debug -v vvv --page 23 -s=test --name=john arg0
  • 命令:
    • 第一个参数,可以为空:home
  • 选项:
    • 短选项:一个中杠,如 -d-rf
    • 长选项:二个中杠,如:--debug
  • 选项值:
    • 无值:-d-rf--debug
    • 有值(空格):-v vvv--page 23
    • 有值(等号):-s=test--name=john
  • 参数:
    • 没有定义 - 的参数:arg0

获取选项,可以获取 stringboolintfloat 多种类型,也可以指定默认值。

$name = Mix\Cli\Flag::match('n', 'name')->string('Xiao Ming');

获取第一个参数

$arg0 = Mix\Cli\Flag::arguments()->first()->string();

获取全部参数

foreach (Mix\Cli\Flag::arguments()->values() as $k => $v) {
    // do something
}

Daemon 后台执行

我们可以通过配合 flag 获取参数,实现通过某几个参数控制程序后台执行。

if (Mix\Cli\Flag::match('d', 'daemon')->bool()) {
    \Swoole\Process::daemon();
}

Middleware 与 Handle exception

可以使用全局中间件给所有命令捕获异常,也可以单独对某个命令配置中间件

$h = function ($next) {
    try {
        $next();
    } catch (\Throwable $ex) {
        // handle exception
        echo(sprintf("ERROR: %s\n", $ex->getMessage()));
    }
};
$cmd = new Mix\Cli\Command([
    'name' => 'hello',
    'short' => 'Echo demo', 
    'run' => function () {
        // do something
    }
]);
Mix\Cli\Cli::use($h)->addCommand($cmd)->run();

Application

我们在编写代码时,可能会要用到 App 中的一些信息。

// 获取基础路径(入口文件所在目录路径)
Mix\Cli\Cli::app()->basePath

// App名称
Mix\Cli\Cli::app()->name

// App版本号
Mix\Cli\Cli::app()->version

// 是否开启debug
Mix\Cli\Cli::app()->debug

Singleton 单命令

当我们的 CLI 只有一个命令时,只需要配置一下 Singleton

$cmd = new Mix\Cli\Command([
    'name' => 'hello',
    'short' => 'Echo demo', 
    'run' => function () {
        // do something
    },
    'singleton' => true,
]);

命令的 Options 将会在 -h/--help 中打印

$ php app.php
Usage: app.php [OPTIONS] COMMAND [ARG...]

Command Options:
  -n, --name    Your name

Global Options:
  -h, --help    Print usage
  -v, --version Print version information

Run 'app.php COMMAND --help' for more information on a command.

Developed with Mix PHP framework. (openmix.org/mix-php)

License

Apache License Version 2.0, http://www.apache.org/licenses/

mix/cli 适用场景与选型建议

mix/cli 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2.12k 次下载、GitHub Stars 达 2, 最近一次更新时间为 2021 年 08 月 04 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「cli」 「commander」 「mix」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 mix/cli 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 mix/cli 我们能提供哪些服务?
定制开发 / 二次开发

基于 mix/cli 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 2.12k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 15
  • 依赖项目数: 5
  • 推荐数: 0

GitHub 信息

  • Stars: 2
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: Apache-2.0
  • 更新时间: 2021-08-04