nowise / uup-application
运行受监控的命令动作,用于CLI命令行和HTTP请求。
1.0.2
2022-01-10 14:31 UTC
Requires
- php: >=7.4
- nowise/uup-application-options: ^1.0
Requires (Dev)
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-10 20:17:47 UTC
README
通过监控同时为CLI命令行和HTTP请求运行相同的命令动作。
操作
操作类处理业务逻辑,运行器执行并监控操作。
示例
<?php declare(strict_types=1); require_once(__DIR__ . '/../vendor/autoload.php'); use UUP\Application\Actions\HelloWorldAction; use UUP\Application\Command\ApplicationRunner; $action = new HelloWorldAction(); $runner = new ApplicationRunner($action); $runner->execute();
生命周期
操作类从 ApplicationAction 继承并实现了生命周期方法 usage()、setup()、execute() 和 cleanup()。至少应该实现 setup 方法,其他方法是可选的。
class HelloWorldAction extends ApplicationAction { public function setup(): void { if ($this->options->isMissing('my-name')) { $this->options->setOption('my-name', "Anders"); } } public function execute(): void { if ($this->options->hasOption('my-name')) { printf("Hello world, %s!\n", $this->options->getString('my-name')); } } }
选项
命令选项根据执行上下文从CLI命令选项或HTTP请求传递。运行器负责处理帮助或静默选项。标准选项 help、version 和 quiet 会透明地处理,包括它们的简写选项。
监控
运行器执行操作类并提供错误监控。默认情况下,当捕获到可抛出异常时,运行器将终止操作。可以通过操作类覆盖错误行为。
内联
对于简单任务,可以使用实现所需方法的匿名(Java风格)类。
<?php declare(strict_types=1); require_once(__DIR__ . '/../vendor/autoload.php'); use UUP\Application\Command\ApplicationAction; use UUP\Application\Command\ApplicationRunner; (new ApplicationRunner(new class extends ApplicationAction { public function execute(): void { // TODO: Implement the business logic for script (this method is required). } }))->execute();
请参阅 示例 目录以获取代码示例。
信息
通过在您的操作类中覆盖基类方法提供 help 和 version 信息。
帮助
覆盖 usage() 方法。调用父方法以输出标准选项。
class HelloWorldAction extends ApplicationAction { public function usage(): void { printf("Sample greeter action class.\n"); printf("\n"); printf("Options:\n"); printf(" my-name: Set caller name.\n"); printf("\n"); parent::usage(); } ... }
版本
类似于用法,但覆盖 version()。此方法完全控制版本输出。
class HelloWorldAction extends ApplicationAction { public function version(): void { printf("hello-world %s\n", $this->getVersion()); } public function getVersion(): string { return "1.2.2"; } ... }
如果默认版本格式是可以接受的,则应该足够覆盖 getVersion() 方法。
零维护
提示:考虑从您的包 composer.json 文件中读取版本字符串,而不是使用需要手动更新的硬编码字符串!