【发布时间】:2020-09-20 07:26:27
【问题描述】:
所以我试图从管理面板更新用户,我通过 v-model 从表单中获取值,然后我使用 FormData() 中的所有数据执行我的 axios.put。问题是我收到一个错误 500,说 x 字段不能为空,所以我猜我的 FormData() 没有被传递给控制器。 我尝试使用 post 方法,效果很好。所以我想知道我做错了什么? 这是 Vuejs 代码:
<script>
export default {
data () {
return {
search: '',
headers: [
{ text: 'ID', align: 'start', value: 'id'},
{ text: 'Name', value: 'name' },
{ text: 'Profile', value: 'profile' },
{ text: 'Email', value: 'email' },
{ text: 'Created At', value: 'created_at' },
{ text: 'Actions', value: 'actions' },
],
users: null,
editedUser: null,
dialog: false,
}
},
methods: {
getUsers(){
axios.get('../admin/getUsers')
.then(response => this.users = response.data)
},
editUser(item){
this.editedUser = item;
this.dialog = true;
},
submitEditedUser(){
let data = new FormData();
data.append('id', this.editedUser.id)
data.append('name', this.editedUser.name)
data.append('profile', this.editedUser.profile)
data.append('email', this.editedUser.email)
axios.put('../admin/updateUser/' + this.editedUser.id, data)
.then(res => {
console.log('done');
})
.catch(err => {
console.log('changes failed');
})
}
},
mounted(){
this.getUsers();
}
}
</script>
这是控制器代码:
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function updateUser($id, Request $request)
{
$user = User::find($id);
$user->name = request('name');
$user->profile = request('profile');
$user->email = request("email");
$user->save();
}
post 一切正常,所以变量或表单没有问题,我认为这真的只是没有传递的数据。虽然我想使用 put 方法,因为它最初用于更新数据。 谢谢!
【问题讨论】:
-
您不能只为您传递给
axios.put(...)的data属性使用原始javascript 对象吗? FormData 通常只对二进制数据和文本数据的混合是必需的。