wildphp / command-parser
WildPHP中使用的命令解析子系统
Requires
- php: >=7.0.0
- yoshi2889/collections: ^0.1
- yoshi2889/validation-closures: ^0.2
Requires (Dev)
- phpunit/phpunit: ^7
- squizlabs/php_codesniffer: ^3.0
This package is auto-updated.
Last update: 2024-08-30 01:02:01 UTC
README
这个库旨在使命令解析变得简单。它不仅可以将字符串解析成命令和参数,还允许您定义参数(所谓策略)的约束并进行自动类型/内容验证。
安装
要安装此库,您需要Composer。
$ composer require wildphp/command-parser ^0.1
入门
此库附带一组可直接使用的参数,但您可能想要开发自己的。更多内容稍后介绍。
库中最重要的类是Command
、ParameterStrategy
、CommandParser
和CommandProcessor
。
命令
这是一个定义您命令的类。它是一个存储类,意味着它不会做更多的事情,只是存储您交给它的项目。
创建命令
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 仓库中查看完整的贡献者列表。在此。