horde/cli_modular

模块化命令行界面库

v3.0.0alpha4 2022-11-04 00:00 UTC

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 支持的每个命令都可能有一组自己的选项。 -cpear 配置文件标识为全局选项。相比之下,--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 库的真实世界示例。