danack / params
将用户输入转换为正确类型参数
Requires
- php: ^8.0
- ext-mbstring: *
- danack/json-safe: ^0.1.0
- danack/var-map: ^0.6.1
- laminas/laminas-diactoros: ^2.6
Requires (Dev)
- danack/coding-standard: 0.3.0
- danack/php-unit-helper: ^0.3.1
- infection/infection: ^0.23.0
- phpstan/phpstan-strict-rules: ^1.1.0
- phpunit/phpunit: 9.5.6
- psr/http-message: ^1.0
- respect/validation: ^1.1.31
- slevomat/coding-standard: ^7.0.9
- squizlabs/php_codesniffer: ^3.6.0
- yoast/yoastcs: 1.0
This package is auto-updated.
Last update: 2023-01-29 14:58:57 UTC
README
因此这里不会有任何活动。
Params
一个无框架验证输入参数的库。
安装
composer require danack/params
TL:DR - 在应用程序中使用
此库允许你定义一组规则,这些规则定义了预期的输入参数,然后进行验证。
以下是一个用于检索文章列表的控制器中的代码示例
function getArticles(Request $request)
{
$getArticlesParams = GetArticlesParams::createFromRequest($request);
echo "After Id: " . $articleGetIndexParams->getAfterId() . PHP_EOL;
echo "Limit: " . $articleGetIndexParams->getLimit() . PHP_EOL;
}
上述示例如果存在任何验证问题,将抛出包含所有验证问题的 ValidationException
。
或者,你可以将参数和错误列表作为元组返回。
function getArticles(Request $request)
{
[$getArticlesParams, $errors] = GetArticlesParams::createOrErrorFromVarMap($request);
if ($errors !== null) {
// do something about those errors.
}
echo "After Id: " . $articleGetIndexParams->getAfterId() . PHP_EOL;
echo "Limit: " . $articleGetIndexParams->getLimit() . PHP_EOL;
}
幕后基本用法
给定一组规则,库将从一个 '变量映射' 中提取适当的值,并验证这些值是否符合定义的规则。
$rules = [ 'limit' => [ new CheckSetOrDefault(10, $variableMap), new IntegerInput(), new MinIntValue(0), new MaxIntValue(100), ], 'offset' => [ new CheckSetOrDefault(null, $variableMap), new SkipIfNull(), new MinIntValue(0), new MaxIntValue(1000000), ], ]; list($limit, $offset) = Params::validate($params);
该代码将从变量映射中提取 'limit' 和 'offset' 值,并检查 limit 是否是一个介于 0 和 100 之间的整数,offset 是否未设置,或必须是一个介于 0 和 1,000,000 之间的整数。
如果存在任何验证问题,将抛出 ValidationException。可以通过 ValidationException::getValidationProblems 获取验证问题。
幕后基本用法(无异常)
或者,你可以避免使用异常进行流程控制
$validator = new ParamsValidator(); $limit = $validator->validate('limit', [ new CheckSetOrDefault(10, $variableMap), new IntegerInput(), new MinIntValue(0), new MaxIntValue(100), ]); $offset = $validator->validate('offset', [ new CheckSetOrDefault(null, $variableMap), new SkipIfNull(), new MinIntValue(0), new MaxIntValue(1000000), ]); $errors = $validator->getValidationProblems(); if (count($errors) !== 0) { // return an error return [null, $errors]; } // return an object with null return [new GetArticlesParams($order, $limit, $offset), null];
测试
我们运行了几个工具来提高代码质量。请运行 sh runTests.sh
来运行它们。
拉取请求应具有完整的单元测试覆盖率。最好是也通过 infection 实现完整的突变覆盖率。
相关信息
Json pointers - https://tools.ietf.org/html/rfc6901 JSON Patch - https://tools.ietf.org/html/rfc6902
未来工作
支持路径上的 Uri 片段编码
# // the whole document
#/foo ["bar", "baz"]
#/foo/0 "bar"
#/ 0
#/a~1b 1
#/c%25d 2
#/e%5Ef 3
#/g%7Ch 4
#/i%5Cj 5
#/k%22l 6
#/%20 7
#/m~0n 8
参数位置
有些人关心参数是在查询字符串中还是体中。此库目前不支持区分它们。
待办事项
-
颜色。
-
未知/无效名称的错误。例如,当输入包含 'namme' 时,'name' 参数使用默认值,这听起来像是一个错误。
-
更好地生成 OpenAPI 相关内容。