mymedia / php-argument-builder
抽象参数构建库
1.1.0
2019-01-22 14:46 UTC
Requires
- php: ^7.2
Requires (Dev)
- phpunit/phpunit: ^7.2
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 包含此许可证的副本。