【发布时间】:2019-09-29 05:01:21
【问题描述】:
所以我遇到了一个奇怪的问题,如果我在 Vue 中通过 axios 发出 Put 请求,它会将其发送到错误的路线。
它是通过 Laravel API 资源进行的简单 CRUD 的一部分。获取和发布工作正常。
这是表格:
<form @submit.prevent="editType" method="post" class="mb-4">
<label v-if="user.gender === 'man'" for="single_male">Enkel<input type="checkbox" name="type" :id="single_male" :value="types.single_male" v-model="checkedType" @change="showSaveButton = true"></label>
<label v-if="user.gender === 'vrouw'" for="single_female">Enkel<input type="checkbox" name="type" :id="single_female" :value="types.single_female" v-model="checkedType" @change="showSaveButton = true"></label>
<label v-if="user.gender === 'man'" for="double_male">Dubbel mannen<input type="checkbox" name="type" :id="double_male" :value="types.double_male" v-model="checkedType" @change="showSaveButton = true"></label>
<label v-if="user.gender === 'vrouw'" for="double_female">Dubbel vrouwen<input type="checkbox" name="type" :id="double_female" :value="types.double_female" v-model="checkedType" @change="showSaveButton = true"></label>
<label for="double_mix">Dubbel gemengd<input type="checkbox" name="type" :id="double_mix" :value="types.double_mix" v-model="checkedType" @change="showSaveButton"></label>
<button type="submit" v-if="showSaveButton">Opslaan</button>
</form>
我的更新功能:
public function update(Request $request, $id)
{
$user_id = auth('api')->user()->id;
$type = Type::where('user_id' ,'=', $user_id)->first();
$type->single_male = $request->input('single_male');
$type->single_female = $request->input('single_female');
$type->double_male = $request->input('double_male');
$type->double_female = $request->input('double_female');
$type->double_mix = $request->input('double_mix');
$type->save();
return redirect()->back();
}
我的方法:
editType() {
let types = this.types;
let data = {
single_male: this.single_male,
single_female: this.single_female,
double_male: this.double_male,
double_female: this.double_female,
double_mix: this.double_mix,
};
axios.put('/types/'+types.id, data)
.then(request => this.successfulEdit(request))
.catch(() => this.failed())
},
successfulEdit() {
alert("Voorkeuren succesvol bijgewerkt!");
}
还有我的路线:
Route::apiresource('types','TypeController');
当我发出 put 请求时,我可以在开发者工具中看到它尝试向当前 url 发出请求,这当然会给出 405 method not allowed 错误。 当我将 axios 请求更改为 ('/types', data) 时,它确实遵循指定的路线,但当然也会给出 405 错误,因为 put 方法需要一个 id。硬编码到例如'/types/4/' 也导致使用当前 url。
我错过了什么或有什么问题吗?提前谢谢各位!
【问题讨论】:
-
types.id的值是多少?你能显示console.log('/types/'+types.id)的输出吗? -
首先,感谢您的帮助!
types.id似乎返回未定义。控制台日志记录types确实返回了正确的数据,尽管它似乎是在一个数组中传递它(而在这种情况下只有一个对象)。我认为问题出在某个地方。控制台日志记录types[0].id确实返回了所需的 id,但写入axios.put('/types/'+types[0].id, data)似乎也不起作用。即使对 url 中的 id 进行硬编码也不起作用。
标签: laravel vue.js routes resources axios