mymedia/php-argument-builder

抽象参数构建库

1.1.0 2019-01-22 14:46 UTC

This package is auto-updated.

Last update: 2024-09-23 20:08:29 UTC


README

参数构建库

AbstractArgumentBuilder 类用于从预定义的可验证参数构建查询字符串。它还可以反向使用,使应用程序仅使用所需的验证参数。它通过自动魔法函数生成自己的属性获取器和设置器以及解除设置。

安装

首先,安装依赖项

$ composer require mymedia/php-argument-builder

使用示例

基本使用

AbstractArgumentBuilder

AbstractArgumentBuilder 实现了 ArgumentBuilderInterface,它只提供了一个方法:build()。魔法函数 __call() 提供了对获取器和设置器以及解除设置的访问,无需手动生成。它还提供了一个 __toString() 函数,该函数返回 HTTP 查询字符串。

$builder
    ->setSearch('foobar')
    ->setFilter('color', 'iridescent')
    ->setFilter('size', 'height', 2)
    ->setFilter('size', 'width', 10);

使用提供的功能,下面的代码将生成查询参数,例如: http://example.com/?search=foobar&filter[color]=iridescent&filter[size][height]=2&filter[size][width]=10. 然而,这需要额外的类扩展我们将在下一节中定义的 AbstractArgumentBuilder

扩展 AbstractArgumentBuilder

参数类型

AbstractArgumentBuilder 定义了以下常量,用于字段验证

    const ARGUMENT_TYPE_MIXED = 0;
    const ARGUMENT_TYPE_ARGUMENT_BUILDER = 1;
    const ARGUMENT_TYPE_NUMERIC = 2;
    const ARGUMENT_TYPE_ENUM = 3;
    const ARGUMENT_TYPE_BOOLEAN = 4;

class SearchArgumentBuilder extends AbstractArgumentBuilder
{
    protected $fields = [
        'search' => self::ARGUMENT_TYPE_MIXED,
        'filter' => SearchFilterArgumentBuilder::class,
    ];
}
class SearchFilterArgumentBuilder extends AbstractArgumentBuilder
{
    protected $fields = [
        'color' => self::ARGUMENT_TYPE_MIXED,
        'size' => SearchFilterSizeArgumentConverter::class, 
    ];
}
class SearchFilterSizeArgumentBuilder extends AbstractArgumentBuilder
{
    protected $fields = [
        'height' => self::ARGUMENT_TYPE_MIXED,
        'width' => self::ARGUMENT_TYPE_MIXED,
    ];
}

字段验证

提供字段验证的简单方法,如果定义的条件未满足,则失败

class SearchFilterPriceArgumentBuilder extends AbstractArgumentBuilder
{
    protected function load()
    {
        $this->fields = array(
            'min' => array(
                'type' => self::ARGUMENT_TYPE_MIXED,
                'validator' => function ($value) {
                    return $value >= 0 && $value <= 1000;
                }
            ),
            'max' => array(
                'type' => self::ARGUMENT_TYPE_MIXED,
                'validator' => function ($value) {
                    return $value >= 0 && $value <= 1000;
                }
            ),
        );
    }
}

代码许可

您可以在 MIT 许可证的条款下免费使用此存储库中的代码。LICENSE 包含此许可证的副本。