Return 如果验证器中未提及正文参数,则会出现错误响应
Return error response if a body params is not mentionned in the validator
我正在使用 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 的验证器无法做到这一点。但是您仍然可以通过向它们提供自定义 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
]);
否则您需要实现自定义验证逻辑,可能使用验证器中的规则数组作为白名单。
我正在使用 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 的验证器无法做到这一点。但是您仍然可以通过向它们提供自定义 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
]);
否则您需要实现自定义验证逻辑,可能使用验证器中的规则数组作为白名单。