nowise/uup-application

运行受监控的命令动作,用于CLI命令行和HTTP请求。

1.0.2 2022-01-10 14:31 UTC

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请求传递。运行器负责处理帮助或静默选项。标准选项 helpversionquiet 会透明地处理,包括它们的简写选项。

监控

运行器执行操作类并提供错误监控。默认情况下,当捕获到可抛出异常时,运行器将终止操作。可以通过操作类覆盖错误行为。

内联

对于简单任务,可以使用实现所需方法的匿名(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();

请参阅 示例 目录以获取代码示例。

信息

通过在您的操作类中覆盖基类方法提供 helpversion 信息。

帮助

覆盖 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 文件中读取版本字符串,而不是使用需要手动更新的硬编码字符串!