【发布时间】:2019-11-21 06:05:56
【问题描述】:
我正在使用 Lumen 框架,它利用 Laravel Validation 我想创建一个验证器规则,以使 Request->input() json 仅包含根中的特定键,例如“域”和“名称服务器”。不多也不少。
通过规则的示例:
{
"domain":"domain.tld",
"nameservers":
{...}
}
不通过规则的例子:
{
"domain":"domain.tld",
"nameservers":
{...},
"Hack":"executeSomething()"
}
我尝试使用几个默认验证规则来实现这一点,但没有成功。 我现在的方法是将请求放在另一个数组中,像这样 $checkInput['input'] = $request->all(); 使验证器验证“根”键。
现在这是我的方法:
创建验证器
$checkInput['input'] = $request->all();
$validator = Validator::make($checkInput, [
'input' => [
'onlyContains:domain,nameservers'
],
]);
创建规则
Validator::extend('onlyContains', function($attribute, $value, $parameters, $validator){
$input = $validator->getData();
$ok = 0;
foreach ($parameters as $key => $value) {
if (Arr::has($input, $attribute . '.' . $value)) {
$ok++;
}
}
if (sizeof(Arr::get($input, $attribute)) - $ok > 0) {
return false;
}
return true;
});
似乎我得到了想要的结果,但我想问是否有更聪明的解决方案,使用 Laravel/Lumen 提供的默认规则。
【问题讨论】:
-
我认为扩展验证器可能是最简洁的方法。我不知道验证器中有什么标准可以满足您的要求。总而言之,您似乎选择了最好的方法。
标签: php laravel validation lumen