mix/cli
Composer 安装命令:
composer require mix/cli
包简介
PHP CLI Interactive Commander
关键字:
README 文档
README
OpenMix 出品:https://openmix.org
Mix CLI
PHP CLI Interactive Commander
PHP 命令行交互指挥官
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
- 没有定义
获取选项,可以获取 string、bool、int、float 多种类型,也可以指定默认值。
$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 获取参数,实现通过某几个参数控制程序后台执行。
- 使用了 Swoole Daemon 方法
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 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 mix/cli 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Helper plugin for Laravel Mix in Craft CMS templates
DI, IoC container, reference spring bean
Command bus implementation: Commands and domain events
Client for the Campaign Commander API (wrapper)
Session library based on Swoole coroutine Redis, following PSR-7 standard
Routing library based on Fast-Route, following PSR-7 / PSR-15 standard
统计信息
- 总下载量: 2.12k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 15
- 依赖项目数: 5
- 推荐数: 0
其他信息
- 授权协议: Apache-2.0
- 更新时间: 2021-08-04