Я использую Lumen Framework, который использует Laravel Validation
Я хотел создать Правило Validator, чтобы json Request-> input () содержал только определенные ключи в корне, такие как «domain» и «nameservers». Не больше и не меньше.
Пример передачи правила:
{
"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.