Возвращать ответ об ошибке, если в валидаторе не указаны параметры тела - PullRequest
0 голосов
/ 01 мая 2020

Я использую Laravel Validator для проверки моего входящего запроса. Поэтому, чтобы быть уверенным, что запрос содержит username и email, я пишу что-то вроде этого:

$validator = Validator::make($request->all(), [
    'username'  => 'required',
    'email'     => 'required|email'
]);

if ($validator->fails()) {
    return response()->json('error', 400);
};

Но если в моем запросе у меня есть дополнительные параметры, такие как name, валидатор не будет рассматривать это как ошибку и не потерпит неудачу.

У вас есть идея, как сделать мой валидатор более строгим, чтобы тело запроса точно совпадало?

Ответы [ 2 ]

3 голосов
/ 01 мая 2020

Технически это не проверка в валидаторе. Но вы можете проверить наличие дополнительных (неожиданных) полей и при желании отправить ответ JSON на основе этого.

Может быть, что-то подобное?

$validationRules = [
    'username'  => 'required',
    'email'     => 'required|email'
];

$validator = Validator::make($request->all(), $validationRules);

// Check if there are extra (unexpected) fields and fail in that case
$extraFields = $request->except(array_keys($validationRules));
if (count($extraFields) > 0) {
    return response()->json('error because there are extra fields', 400);
}

if ($validator->fails()) {
    return response()->json('error', 400);
}

return response()->json('ok', 200);

Я надеюсь, что это возможно помочь вам.

0 голосов
/ 01 мая 2020

Правила валидации могут быть привязаны только к свойствам, поэтому я не думаю, что валидатор Laravel может это сделать. Но вы все равно можете явно запретить определенные поля, предоставив им пользовательское правило закрытия , например:

$denied = function($attr, $value, $fail) {
    $fail("{$attr} is denied.");
};

$validator = Validator::make($request->all(), [
    'username'  => 'required',
    'email'     => 'required|email',
    'name'      => $denied,
    'password'  => $denied
]);

В противном случае вам нужно реализовать пользовательские логи проверки c, возможно, используя массив правил из вашего валидатора в виде белого списка.

...