Laravel资源路由从axios删除

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()方法处理删除请求?

Cy *_*nol 4

MethodNotAllowedHttpException当我们尝试使用路由不支持的 HTTP 动词向路由发送请求时,Laravel 会抛出。在本问题中,我们看到此错误是因为 JavaScript 代码向路径为 的 URL发送了DELETE请求,该请求由仅支持GETPOST 的/job\xe2\x80\x91management路由处理。我们需要将 URL 更改为 Laravel 期望资源丰富的控制器的常规格式。

\n\n

该错误令人困惑,因为它隐藏了我们将请求发送到错误 URL 的事实。要理解原因,让我们看一下Route::resource()(来自文档)创建的路由:

\n\n
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()

\n\n

要执行问题中所示的DELETE请求,我们需要将请求发送到路径类似于 的 URL /job-management/{position},其中{position}是我们要删除的职位模型的 ID。JavaScript 代码可能类似于:

\n\n
axios.delete(\'/job-management/5\', this.deletedata).then((res) => { ... })\n
Run Code Online (Sandbox Code Playgroud)\n\n

我已将职位 ID 硬编码到 URL 中以清楚地说明这一概念。但是,我们可能希望使用一个变量来表示此 ID:

\n\n
let 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 版本。注意反引号的位置 (` ),而不是标准引号。

\n