Laravel 从 axios 中删除资源路由
Laravel resource route delete from axios
我想设置 axios 以使用资源路由删除记录:
axios.delete('/job-management', this.deletedata).then((res)=>{
console.log(res);
})
我的路线有:
Route::resource('job-management', "PositionsController", [ 'as' => 'jobs']);
现在,在我的 PositionsController
中,我有:
public function destroy(Positions $positions) {
return $positions;
}
但是上面总是returns"method not allowed"。如何使用 axios delete()
方法处理删除请求?
正如我在上面的代码中看到的那样,您将 Positions
eloquent 作为参数传递给 destroy
方法,但是在您的 vueJS
中您没有传递这个目的。为此你会像这样传递它:
axios.delete('/job-management/${id}').then((res)=>{
console.log(res);
})
和你的 axios 删除的 url 中的 id 参数,它可以是数据对象或任何想法。
希望对你有所帮助
Laravel 当我们尝试使用路由不支持的 HTTP 谓词向路由发送请求时抛出 MethodNotAllowedHttpException
。在这个问题的例子中,我们看到这个错误是因为 JavaScript 代码发送了一个 DELETE 请求到路径为 /job‑management
的 URL,它由仅支持 GET 和 POST 请求的路由处理。我们需要将 URL 更改为 Laravel 期望足智多谋的控制器的常规格式。
该错误令人困惑,因为它隐藏了我们将请求发送到错误 URL 的事实。要了解原因,让我们看一下 Route::resource()
(来自 documentation)创建的路由:
Verb URI Action Route Name
GET /job-management index job-management.index
GET /job-management/create create job-management.create
POST /job-management store job-management.store
GET /job-management/{position} show job-management.show
GET /job-management/{position}/edit edit job-management.edit
PUT/PATCH /job-management/{position} update job-management.update
DELETE /job-management/{position} destroy job-management.destroy
如上所示,具有 /job-management
路径组件的 URLs 被传递给不处理 [=37] 的控制器的 index()
和 store()
方法=]DELETE 请求。这就是我们看到异常的原因。
要执行问题中所示的 DELETE 请求,我们需要将请求发送到 URL,路径类似于 /job-management/{position}
,其中{position}
是我们要删除的位置模型的ID。 JavaScript 代码可能类似于:
axios.delete('/job-management/5', this.deletedata).then((res) => { ... })
我已将位置 ID 硬编码到 URL 中以清楚地说明这个概念。然而,我们可能想为这个 ID 使用一个变量:
let positionId = // get the position ID somehow
axios.delete(`/job-management/${positionId}`, this.deletedata).then((res) => { ... })
此表单中的 URL 使 Laravel 能够将 DELETE 请求路由到控制器的 destroy()
方法。上面的示例使用 ES6 template string literals 因为问题中的代码表明我们正在使用支持此功能的 JavaScript 版本。请注意模板字符串周围的反引号 (`
) 而不是标准引号。
我想设置 axios 以使用资源路由删除记录:
axios.delete('/job-management', this.deletedata).then((res)=>{
console.log(res);
})
我的路线有:
Route::resource('job-management', "PositionsController", [ 'as' => 'jobs']);
现在,在我的 PositionsController
中,我有:
public function destroy(Positions $positions) {
return $positions;
}
但是上面总是returns"method not allowed"。如何使用 axios delete()
方法处理删除请求?
正如我在上面的代码中看到的那样,您将 Positions
eloquent 作为参数传递给 destroy
方法,但是在您的 vueJS
中您没有传递这个目的。为此你会像这样传递它:
axios.delete('/job-management/${id}').then((res)=>{
console.log(res);
})
和你的 axios 删除的 url 中的 id 参数,它可以是数据对象或任何想法。
希望对你有所帮助
Laravel 当我们尝试使用路由不支持的 HTTP 谓词向路由发送请求时抛出 MethodNotAllowedHttpException
。在这个问题的例子中,我们看到这个错误是因为 JavaScript 代码发送了一个 DELETE 请求到路径为 /job‑management
的 URL,它由仅支持 GET 和 POST 请求的路由处理。我们需要将 URL 更改为 Laravel 期望足智多谋的控制器的常规格式。
该错误令人困惑,因为它隐藏了我们将请求发送到错误 URL 的事实。要了解原因,让我们看一下 Route::resource()
(来自 documentation)创建的路由:
Verb URI Action Route Name
GET /job-management index job-management.index
GET /job-management/create create job-management.create
POST /job-management store job-management.store
GET /job-management/{position} show job-management.show
GET /job-management/{position}/edit edit job-management.edit
PUT/PATCH /job-management/{position} update job-management.update
DELETE /job-management/{position} destroy job-management.destroy
如上所示,具有 /job-management
路径组件的 URLs 被传递给不处理 [=37] 的控制器的 index()
和 store()
方法=]DELETE 请求。这就是我们看到异常的原因。
要执行问题中所示的 DELETE 请求,我们需要将请求发送到 URL,路径类似于 /job-management/{position}
,其中{position}
是我们要删除的位置模型的ID。 JavaScript 代码可能类似于:
axios.delete('/job-management/5', this.deletedata).then((res) => { ... })
我已将位置 ID 硬编码到 URL 中以清楚地说明这个概念。然而,我们可能想为这个 ID 使用一个变量:
let positionId = // get the position ID somehow
axios.delete(`/job-management/${positionId}`, this.deletedata).then((res) => { ... })
此表单中的 URL 使 Laravel 能够将 DELETE 请求路由到控制器的 destroy()
方法。上面的示例使用 ES6 template string literals 因为问题中的代码表明我们正在使用支持此功能的 JavaScript 版本。请注意模板字符串周围的反引号 (`
) 而不是标准引号。