Geo*_*off 5 javascript php laravel laravel-routing vuejs2
我想设置axios使用资源路由删除记录:
axios.delete('/job-management', this.deletedata).then((res)=>{
console.log(res);
})
Run Code Online (Sandbox Code Playgroud)
对于我的路线,我有:
Route::resource('job-management', "PositionsController", [ 'as' => 'jobs']);
Run Code Online (Sandbox Code Playgroud)
现在,在我的PositionsController
身上:
public function destroy(Positions $positions) {
return $positions;
}
Run Code Online (Sandbox Code Playgroud)
但以上总是返回"不允许的方法".如何使用axios delete()
方法处理删除请求?
MethodNotAllowedHttpException
当我们尝试使用路由不支持的 HTTP 动词向路由发送请求时,Laravel 会抛出。在本问题中,我们看到此错误是因为 JavaScript 代码向路径为 的 URL发送了DELETE请求,该请求由仅支持GET和POST 的/job\xe2\x80\x91management
路由处理。我们需要将 URL 更改为 Laravel 期望资源丰富的控制器的常规格式。
该错误令人困惑,因为它隐藏了我们将请求发送到错误 URL 的事实。要理解原因,让我们看一下Route::resource()
(来自文档)创建的路由:
Verb URI Action Route Name\nGET /job-management index job-management.index\nGET /job-management/create create job-management.create\nPOST /job-management store job-management.store\nGET /job-management/{position} show job-management.show\nGET /job-management/{position}/edit edit job-management.edit\nPUT/PATCH /job-management/{position} update job-management.update\nDELETE /job-management/{position} destroy job-management.destroy\n
Run Code Online (Sandbox Code Playgroud)\n\n如上所示,带有路径组件的 URL将传递给不处理DELETE/job-management
请求的控制器index()
和方法。这就是我们看到异常的原因。store()
要执行问题中所示的DELETE请求,我们需要将请求发送到路径类似于 的 URL /job-management/{position}
,其中{position}
是我们要删除的职位模型的 ID。JavaScript 代码可能类似于:
axios.delete(\'/job-management/5\', this.deletedata).then((res) => { ... })\n
Run Code Online (Sandbox Code Playgroud)\n\n我已将职位 ID 硬编码到 URL 中以清楚地说明这一概念。但是,我们可能希望使用一个变量来表示此 ID:
\n\nlet positionId = // get the position ID somehow\naxios.delete(`/job-management/${positionId}`, this.deletedata).then((res) => { ... })\n
Run Code Online (Sandbox Code Playgroud)\n\n这种形式的 URL 使 Laravel 能够将DELETE请求路由到控制器的destroy()
方法。上面的示例使用ES6 模板字符串文字,因为问题中的代码表明我们正在使用支持此功能的 JavaScript 版本。注意反引号的位置 (`
),而不是标准引号。
归档时间: |
|
查看次数: |
1280 次 |
最近记录: |