wildphp/command-parser

WildPHP中使用的命令解析子系统

v0.1.2 2018-12-05 14:26 UTC

This package is auto-updated.

Last update: 2024-08-30 01:02:01 UTC


README

Build Status Scrutinizer Code Quality Scrutinizer Code Coverage Latest Stable Version Latest Unstable Version Total Downloads

这个库旨在使命令解析变得简单。它不仅可以将字符串解析成命令和参数,还允许您定义参数(所谓策略)的约束并进行自动类型/内容验证。

安装

要安装此库,您需要Composer

$ composer require wildphp/command-parser ^0.1

入门

此库附带一组可直接使用的参数,但您可能想要开发自己的。更多内容稍后介绍。

库中最重要的类是CommandParameterStrategyCommandParserCommandProcessor

命令

这是一个定义您命令的类。它是一个存储类,意味着它不会做更多的事情,只是存储您交给它的项目。

创建命令

Command构造函数接受两个参数。一个当命令被触发时应调用的回调,以及一个或多个将定义命令行为的ParameterStrategy实例。例如

$foo = function () {};
$command = new Command($foo, new ParameterStrategy(0, 1, [
    new NumericParameter(),
]);  

参数策略

ParameterStrategy实例描述了命令可以如何执行。

其构造函数接受一些参数

__construct(
        int $minimumParameters = -1,
        int $maximumParameters = -1,
        array $initialValues = [],
        bool $implodeLeftover = false
)
  • $minimumParameters$maximumParameters描述了这个特定策略可以接受多少个参数。它们可以设置为-1或false来禁用任一边界。然而,最小值不能大于最大值。
  • $initialValues是一个ParameterInterface对象的数组。关于这些稍后介绍。
  • $concatLeftover是一个布尔值。当设置为true时,策略将在达到最大参数计数时将所有剩余参数连接成一个。例如,考虑一个只能接受最多2个参数的策略。如果您传递一个包含3个参数的命令并设置此标志,例如 '!test 1 2 3',则2和3将被连接为 array('1', '2 3')

可用参数

数值参数

接受任何数值值,它使用php内部的is_numeric函数。

预定义字符串参数

在其构造函数中设置一个预定义的字符串,并且只有该字符串将被接受为其值,因此任何其他值将被拒绝。

字符串参数

在所有情况下都返回true,因为参数始终是字符串。

命令解析器

如名称所示,这是负责实际解析消息的类。在这样做时,它会分配ParsedCommand对象。作为一个实用程序类,它的方法以静态方式调用。

findApplicableStrategy

findApplicableStrategy(Command $commandObject, array $parameters): ParameterStrategy

此方法找到最适合在$parameters上使用的策略,并返回它。

parseFromString

parseFromString(string $string, string $prefix = '!'): ParsedCommand

从字符串中解析命令及其参数,但不处理它们。有关CommandProcessor的说明,请参见下文。设置$prefix为要使用的前缀,它应前缀任何给定的命令。

ParsedCommand是一个包含命令名称和提供的原始参数的对象。

命令处理器

此类进一步处理ParsedCommand并提供值转换功能。此外,在实例化时,它作为命令的存储设施,因此它们不需要在其他地方存储。

processParsedCommand

这个类的心脏是这个静态函数。

public static function processParsedCommand(ParsedCommand $parsedCommand, Command $command): ProcessedCommand

它接收一个 ParsedCommand 对象和一个伴随的 Command 对象,并将其处理成一个 ProcessedCommand 对象,该对象包含原始的 ParsedCommand 数据、回调、转换后的参数值以及用于转换的策略。

process

process(ParsedCommand $parsedCommand): ProcessedCommand

与上面的函数类似,但使用内部命令集合。

registerCommand

registerCommand(string $command, Command $commandObject): bool

向内部命令集合添加一个命令,通过 $command 识别。成功返回 true,如果给定标识符已存在则返回 false。

findCommand

findCommand(string $command): Command

返回一个通过上面函数添加的、由 $command 识别的 Command 对象。

贡献者

您可以在 GitHub 仓库中查看完整的贡献者列表。在此