horde / cli_modular
模块化命令行界面库
Requires
- php: ^7.4 || ^8
- horde/argv: ^3 || dev-FRAMEWORK_6_0
Suggests
- horde/test: ^3 || dev-FRAMEWORK_6_0
This package is auto-updated.
Last update: 2024-09-12 10:20:24 UTC
README
命令行界面通常可以由负责不同操作的多个模块组成。Horde_Cli_Modular 允许每个这样的模块影响整个命令行界面。
首先,每个模块都可以添加自己的选项组,包括特定的标题、描述和一组特定于模块的选项(有关详细信息,请参阅 Horde_Argv_OptionGroup)。此外,Horde_Cli_Modular 允许模块修改全局用法字符串并添加对所有模块都有效的基本选项。
简介
工具 pear 的命令行是一个很好的例子,说明了 Horde_Cli_Modular 支持的界面类型:有多个全局选项可用,但 pear 支持的每个命令都可能有一组自己的选项。 -c 将 pear 配置文件标识为全局选项。相比之下,--register-only 选项是 pear 提供的 install 命令的特定选项。
显然,并非所有命令行界面都符合此方案。因此,不应将 Horde_Cli_Modular 视为适用于所有 CLI 工具的通用实用程序。但对于所有具有此类结构的 CLI 辅助工具,库应提供足够合理的框架,以便快速开始添加模块。
结构
Horde_Cli_Modular 提供了四个类作为主要结构元素
Horde_Cli_Modular
Horde_Cli_Modular 类是构建模块化命令行界面的入口点。该类提供了组合和访问不同模块的方法。
设置
此类生成基本设置,您只需提供少量基本参数即可设置系统。本简介将重点介绍中央设置,您需要查阅 API 文档以获取更多详细信息。
以下演示了如何构建 Horde_Cli_Modular 实例
$modular = new Horde_Cli_Modular( array( 'parser' => array('usage' => '[options] MODULE'), 'modules' => array('directory' => __DIR__ . '/Module'), 'provider' => array('prefix' => 'Horde_Something_Module_') ) );
parser 参数预解析命令行参数解析器(通常是 Horde_Argv)。上面的片段仅提供了 usage 设置,当用户请求 CLI 脚本的帮助时,它将显示为简化的用法说明。
modules 部分定义了包含各种模块的 目录,这些模块是命令行界面的一部分。
最后,provider 设置指示模块类将具有的公共 前缀。
为了匹配上述设置,假设的 Horde_Something 包的文件结构如下所示
lib/ Horde/ Something.php Something/ Module/ One.php Two.php
有两个模块:One.php 中的 Horde_Something_Module_One 和 Two.php 中的 Horde_Something_Module_Two。
用法
创建 Horde_Cli_Modular 实例后,您应创建命令行解析器并读取用户提供的参数。
$parser = $modular->createParser(); list($options, $arguments) = $parser->parseArgs();
这是您需要执行的主要操作。
除此之外,Horde_Cli_Modular 允许您使用以下方式检索模块列表
$modules = $modular->getModules();
您还可以使用以下方式检索模块实例
$module = $modular->getProvider()->getModule('one');
编写模块
首先,每个模块都可以添加自己的选项组,包括特定的标题、描述和一组特定于模块的选项(有关详细信息,请参阅 Horde_Argv_OptionGroup)。此外,Horde_Cli_Modular 允许模块修改全局用法字符串并添加对所有模块都有效的基本选项。
为了实现这一点,所有模块都必须实现 Horde_Cli_Modular_Module 接口
interface Horde_Cli_Modular_Module { public function getUsage(); public function getBaseOptions(); public function hasOptionGroup(); public function getOptionGroupTitle(); public function getOptionGroupDescription(); public function getOptionGroupOptions(); }
有两个函数可以影响命令行解析器的全局设置:getUsage() 和 getBaseOptions()。第一个函数返回一个字符串,该字符串将在用户请求帮助屏幕时添加到通用的使用说明中。第二个函数返回一个包含 Horde_Argv_Option 实例的数组,每个实例定义了一个对所有模块都有效的选项。
如果模块定义了自己的选项组(将在命令的帮助文本中作为单独的部分显示),hasOptionGroup() 需要返回 true。
选项组需要一个标题(由 getOptionGroupTitle() 返回的字符串)和描述(由 getOptionGroupDescription() 返回的字符串)。最后,选项组需要一个列表,其中包含定义选项组的特定模块有效的选项。相应的列表是通过 getOptionGroupOptions() 方法返回的包含 Horde_Argv_Option 实例的数组。
示例
目前,包 Horde_Kolab_Cli 和组件应用都使用了 Horde_Cli_Modular。您可以通过查看这些包来了解使用 Horde_Cli_Modular 库的真实世界示例。