我正在使用Laravel Validator测试我的传入请求。因此,为确保该请求包含一个username
和一个email
,我编写如下内容:
$validator = Validator::make($request->all(), [
'username' => 'required',
'email' => 'required|email'
]);
if ($validator->fails()) {
return response()->json('error', 400);
};
但是如果在我的请求中我有诸如name
之类的附加参数,验证器将不会将其视为错误并且不会失败。
您有一个想法,我可以如何使我的验证器更加严格,以便请求主体完全匹配?
从技术上讲,这不是验证程序中的验证失败。但是您可以检查是否还有其他(意外)字段,并根据需要发送基于此的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);
我希望它能为您提供帮助。
验证规则只能附加到属性,所以我认为Laravel的Validator无法做到这一点。但是您仍然可以通过向它们提供自定义closure rule来明确禁止某些字段,如下所示:
$denied = function($attr, $value, $fail) {
$fail("{$attr} is denied.");
};
$validator = Validator::make($request->all(), [
'username' => 'required',
'email' => 'required|email',
'name' => $denied,
'password' => $denied
]);
否则,您需要实现自定义验证逻辑,可能利用验证器中的规则数组作为白名单。