當嘗試使用 javascript 捕獲我的 Laravel 驗證錯誤時,它一直以 html 格式而不是 json 格式為我提供資料,我的驗證看起來很正常。注意我使用的是 vue.js 3,如果驗證通過了控制器中的實際方法作業正常,這只是一個驗證問題。
$request->validate([
'first_name' => ['required', 'string', 'min:3', 'max:255'],
'last_name' => ['required', 'string', 'min:3', 'max:255'],
'email' => ['required', 'email', 'min:3', 'max:255'],
'message' => ['required', 'string', 'min:3']
]);
我的獲取方法如下:
fetch('/contact-us', {
method: 'POST',
headers: {
'CONTENT-TYPE': 'application/json'
},
body: JSON.stringify(this.form)
}).then((response) => response.text())
.then((data) => {
console.log(data);
//data = JSON.parse(data);
}).catch(function(error) {
console.log('Error: ' error);
});
我的網路路線是:
Route::post('/contact-us', [IndexController::class, 'contactForm']);
html格式的錯誤是:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<link href="/css/app.css" rel="stylesheet" />
<script src="/js/app.js" defer></script>
</head>
<body>
<style>
body{
margin: 0 !important;
overflow-x: hidden;
}
.container {
padding-top: 20px;
}
</style>
<div id="app" data-page="{"component":"ContactUs","props":{"errors":{"email":"The email must be a valid email address."},"csrf":"tFYwkcZZhNfeb2WXDwdnSv4dchujDvSvLfFGhHW1"},"url":"\/contact-us","version":"0f4e2ee0f7e2ca9da665d2f8035743df"}"></div></body>
uj5u.com熱心網友回復:
如果在傳統 HTTP 請求期間驗證失敗,則會生成對前一個 URL 的重定向回應。
如果傳入請求是 XHR 請求,將回傳包含驗證錯誤訊息的 JSON 回應。
首先,我假設/contact-us是 Web 路由而不是 API 路由。
失敗時的$request->validate()默認行為是將您重定向到上一個 Web 路由,使用MessageBag.
為了防止這種默認行為,您需要將驗證程序包裝在一個try-catch塊中并捕獲Illuminate\Validation\ValidationException例外并從[IndexController::class, 'contactForm'].
錯誤訊息陣列將自動轉換為 JSON 回應。
try {
$request->validate([
'first_name' => ['required', 'string', 'min:3', 'max:255'],
'last_name' => ['required', 'string', 'min:3', 'max:255'],
'email' => ['required', 'email', 'min:3', 'max:255'],
'message' => ['required', 'string', 'min:3']
]);
} catch (\Illuminate\Validation\ValidationException $th) {
return $th->validator->errors();
}
示例回應:
{
"first_name": [
"first name field is required."
],
"last_name": [
"last name field is required."
],
"email": [
"L'E-mail field is required."
],
"message": [
"message field is required."
]
}
uj5u.com熱心網友回復:
laravel 檔案的天數給出了 422 回應,這會在通常的錯誤捕獲塊中引發錯誤。可以通過將此捕獲錯誤添加到您的 json 發布請求中來提取此資料
.catch(error => {
if (error.response.data.errors) {
console.log(error.response.data.errors);
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/428428.html
標籤:javascript 拉拉维尔
