【发布时间】:2021-11-23 04:25:26
【问题描述】:
我正在尝试使用Vue 3 和Laravel 8 构建一个简单的contact form,但我正在努力将frontend 与backend 连接起来。现在我的代码会产生一个422 (Unprocessable Entity) 响应,但我不知道为什么以及如何调查。响应与传递的data values 无关。例如name = null 和name = myname 产生相同的错误。
contact.vue:
<template>
<section class="contact">
<form @submit.prevent="storeContact" method="post">
<input type="text" placeholder="Name" v-model="user.name">
<input type="text" placeholder="Email" v-model="user.email">
<input type="text" placeholder="Message" v-model="user.message">
<button action="post" type="submit">Submit</button>
</form>
</section>
</template>
<script>
import {ref} from "vue";
export default {
setup() {
let success = false;
let error = false;
let user = ref({
name: null,
email: null,
message: null
});
function storeContact() {
axios.post('/contact', Object.values(user.value)
)
.then((res) => {
success = true;
})
.catch((error) => {
error = true;
})
};
return {
success,
error,
user,
storeContact
}
}
}
</script>
web.php:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
Route::post('/contact', 'App\Http\Controllers\ContactController@submit');
ContactController.php:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ContactController extends Controller
{
public function submit(Request $request) {
$this->validate($request, [
'name' => 'required',
'email' => 'required | email',
'message' => 'required'
]);
return response()->json(null, 200);
}
}
Browser console error:
app.js:17263 POST http://localhost:3000/contact 422 (Unprocessable Entity)
Laravel 日志没有条目。这是否意味着它是frontend problem?
编辑:
dev tools network tab 中的response 显示:
{"message":"The given data was invalid.","errors":{"name":["The name field is required."],"email":["The email field is required."],"message":["The message field is required."]}}
将这些参数更改为text/values 不会带来任何变化。
编辑2:
这些问题已排除:
Missing CSRF-Token:不,network 选项卡中存在 csrf 令牌 (XSRF)。
null passed:不,不管我通过什么,结果都是一样的。
【问题讨论】:
-
也许:返回 response()->json(null, 200); -> 返回响应()->json(array(), 200);?
-
@OfirBaruch 没有区别
-
验证失败时返回
422。您检查过网络分接头中的请求响应吗? -
您能确认姓名、电子邮件和消息不为空吗?
-
@OfirBaruch 是的,当我对这些参数使用
values或text时,它返回相同的error。
标签: php laravel vue.js httpresponse vuejs3