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

正如我在上面的代码中看到的那样,您将 Positionseloquent 作为参数传递给 destroy 方法,但是在您的 vueJS 中您没有传递这个目的。为此你会像这样传递它:

axios.delete('/job-management/${id}').then((res)=>{
    console.log(res);
})

和你的 axios 删除的 url 中的 id 参数,它可以是数据对象或任何想法。

希望对你有所帮助

Laravel 当我们尝试使用路由不支持的 HTTP 谓词向路由发送请求时抛出 MethodNotAllowedHttpException。在这个问题的例子中,我们看到这个错误是因为 JavaScript 代码发送了一个 DELETE 请求到路径为 /job‑management 的 URL,它由仅支持 GETPOST 请求的路由处理。我们需要将 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 版本。请注意模板字符串周围的反引号 (`) 而不是标准引号。