stoyantodorov/resolve-utilities

1.0.0 2023-10-23 08:46 UTC

This package is auto-updated.

Last update: 2024-09-09 22:05:53 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

此包提供了一种使用便捷接口实例化类、向其发送类型化输入并接收类型化结果的方法

public function useUtility(string $abstract, array $input): mixed

这是通过 Resolver 类实现的。它负责确保没有重复的实例,并在使用之前重置输入/输出。
实例化的类应该扩展 StoyanTodorov\ResolveUtilities\Utility - 因此它必须实现 execute 方法。

abstract public function execute(): self

发送到 useUtility 的数据通过 array $input,在实例中作为类属性可用。我们期望的输出应设置在 output 属性中。这样我们就可以依赖类型化输入和输出,而无需将执行代码绑定到特定接口。

要求

  • PHP 8.1

  • Laravel

安装

composer require stoyantodorov/resolve-utilities

使用

扩展 Utility
use StoyanTodorov\ResolveUtilities\Utility;

class StringOutputExample extends Utility
{
    protected string $output;

    protected string|null $propOne = null;
    protected int|null $propTwo = null;
    
    protected array $requiredInput = ['propOne'];
    protected array $defaultInput = ['propTwo' => 1];

    public function execute(): Utility
    {
        $this->output = $this->propOne;

        return $this;
    }
}
  • requiredInput 中添加 execute 使用的属性名称。
  • defaultInput 中添加具有其默认值的属性名称。当调用 useUtility 方法时,除非在第二个参数中添加,否则使用这些值。

Resolver

$resolver = new StoyanTodorov\ResolveUtilities\Resolver;
$resultOne = $resolver->useUtility(StringOutputExample::class, ['propOne' => 'test']);
$resultTwo = $resolver->useUtility(StringOutputExample::class, ['propOne' => 'test', 'propTwo' => 100]);
  • 发送给 useUtility 的第一个参数也可以是一个抽象定义,如 'single-output-example'。如果有这样的定义在 Laravel 服务容器 中,它将被实例化。

HasResolver

use StoyanTodorov\ResolveUtilities\HasResolver;

class ExampleClient 
{
    use HasResolver;
    
    public function test(string $propOne): string
    {
        return $this->useUtility(StringOutputExample::class, compact('propOne'));
    }
}
$result = (new ExampleClient)->test('test');

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 变更日志

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件