MixPHP框架中的Mix CLI工具详解
mix mix-php/mix: 是一个轻量级的 PHP 框架,适合用于快速构建小型到中型的 Web 应用。 项目地址: https://gitcode.com/gh_mirrors/mi/mix
什么是Mix CLI
Mix CLI是MixPHP框架中一个强大的命令行交互与管理工具,它为PHP开发者提供了构建复杂命令行应用的完整解决方案。不同于传统的单一命令脚本,Mix CLI允许在一个可执行文件中集成多个命令,同时提供了参数解析、异常处理等开发者常用的功能模块。
核心特性
Mix CLI具有以下几个显著特点:
- 多命令支持:单个CLI程序可包含多个子命令
- 参数解析:支持UNIX和GNU风格的参数解析
- 异常处理:全局异常捕获与处理机制
- 后台执行:支持守护进程模式
- 中间件:命令执行前后可插入中间件逻辑
安装与基础使用
安装Mix CLI非常简单,只需通过Composer:
composer require mix/cli
基础使用示例:
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');
echo "Hello, $name!";
}
]);
$opt = new Mix\Cli\Option([
'names' => ['n', 'name'],
'usage' => 'Your name'
]);
$cmd->addOption($opt);
Mix\Cli\Cli::addCommand($cmd)->run();
命令定义方式
Mix CLI提供了两种定义命令的方式:
1. 闭包方式
$cmd = new Mix\Cli\Command([
'name' => 'hello',
'run' => function () {
// 命令逻辑
}
]);
2. 类方式(推荐)
class HelloCommand implements Mix\Cli\RunInterface
{
public function main(): void
{
// 命令逻辑
}
}
$cmd = new Mix\Cli\Command([
'name' => 'hello',
'run' => new HelloCommand(),
]);
类方式更易于组织复杂命令逻辑,也便于单元测试。
参数解析详解
Mix CLI的参数解析支持多种格式:
- 短选项:
-d
、-rf
- 长选项:
--debug
- 带值的选项:
- 空格分隔:
-v vvv
、--page 23
- 等号分隔:
-s=test
、--name=john
- 空格分隔:
参数获取方法:
// 获取字符串参数
$name = Mix\Cli\Flag::match('n', 'name')->string('default');
// 获取布尔参数
$debug = Mix\Cli\Flag::match('d', 'debug')->bool();
// 获取整型参数
$page = Mix\Cli\Flag::match('p', 'page')->int(1);
// 获取浮点参数
$ratio = Mix\Cli\Flag::match('r', 'ratio')->float(0.5);
// 获取第一个位置参数
$arg0 = Mix\Cli\Flag::arguments()->first()->string();
// 获取所有位置参数
$args = Mix\Cli\Flag::arguments()->values();
高级功能
守护进程模式
通过参数控制程序后台运行:
if (Mix\Cli\Flag::match('d', 'daemon')->bool()) {
\Swoole\Process::daemon();
}
中间件机制
可以为所有命令或特定命令添加中间件:
$middleware = function ($next) {
try {
// 前置逻辑
$next();
// 后置逻辑
} catch (\Throwable $ex) {
// 异常处理
echo "ERROR: {$ex->getMessage()}\n";
}
};
// 全局中间件
Mix\Cli\Cli::use($middleware);
// 命令特定中间件
$cmd->use($middleware);
单命令模式
当CLI只需要一个命令时,可以设置为单例模式:
$cmd = new Mix\Cli\Command([
'name' => 'hello',
'singleton' => true,
'run' => function () {
// 命令逻辑
}
]);
应用信息获取
CLI程序运行时可以获取应用信息:
// 应用基础路径(入口文件所在目录)
$basePath = Mix\Cli\Cli::app()->basePath;
// 应用名称
$appName = Mix\Cli\Cli::app()->name;
// 应用版本
$version = Mix\Cli\Cli::app()->version;
// 是否调试模式
$isDebug = Mix\Cli\Cli::app()->debug;
最佳实践建议
- 命令组织:对于复杂CLI应用,建议按功能模块组织命令类
- 参数验证:在获取参数后应当进行有效性验证
- 错误处理:合理使用中间件进行全局异常捕获
- 日志记录:重要操作应当记录日志
- 单元测试:为命令编写单元测试确保稳定性
Mix CLI作为MixPHP框架的组成部分,为PHP命令行应用开发提供了优雅而强大的解决方案,无论是开发简单的脚本工具还是复杂的命令行应用,都能从中受益。
mix mix-php/mix: 是一个轻量级的 PHP 框架,适合用于快速构建小型到中型的 Web 应用。 项目地址: https://gitcode.com/gh_mirrors/mi/mix
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考