如何解决Laravel - 验证一个整数是否小于另一个属性中的元素数
我正在为搜索端点编写验证代码,并尝试验证应在结果中匹配的用户定义的关键字数量小于或等于请求中的关键字数量。
请求可能如下所示:
{
"keywords": [
"foo","bar","baz",],"minimumShouldMatch": 2
}
这会指示服务器我们希望结果至少与这些关键字中的两个匹配(使用 Elasticsearch 的常见操作)。显然,minimumShouldMatch
的值必须小于关键字的数量:服务器匹配的数量不能超过我们提供给它的数量。
我们可以简单地省略验证上限,稍后将值标准化,然后收工:
$minimumShouldMatch = min(
count($request->get('keywords')),$request->get('minimumShouldMatch')
);
然而,API 最终会被第三方开发者使用,我想明确指出错误的输入值,以防止误解发生。
另一种可能的解决方案是创建一个新的自定义规则对象或闭包。然而,规则对象仅接收单个属性的名称和值,而不接收请求中的其他属性 (see the docs)。在 this answer 之后,我们可以将请求属性传递给规则构造函数或使用 Facade:
class LowerThanOrEqualToNumberOfKeywords implements Rule {
public function __construct(
protected string $field,protected array $attributes,) {}
public function passes($attribute,$value): bool {
return $value <= count($this->attributes($this->field));
// or
return $value <= count(Input::get($this->field));
}
}
两者都是处理这个问题的非惯用方法。
我还尝试将关键字属性的名称传递给低于规则 (lt:keywords
),但由于属性 not having the same type(可能是正确的)而失败。
是否有一种直接的方法来验证整数属性是否小于(或等于)单独数组属性中的元素数?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。