Laravel 资源控制器 DELETE 使用 Axios 抛出 405

Posted

技术标签:

【中文标题】Laravel 资源控制器 DELETE 使用 Axios 抛出 405【英文标题】:Laravel resource controller DELETE throws 405 with Axios 【发布时间】:2018-06-22 17:54:46 【问题描述】:

我正在使用 react + laravel 开发一个简单的 crud 应用程序。我正在使用 Axios 向服务器发出请求。 GET,POST工作正常。我可以使用 POST 方法 (axios.post) 创建一个新项目。但是,当我尝试删除一个项目时,laravel 会抛出一个 405 错误,它代表 'Method Not Allowed'

这是我的路线:

Route::resource('items', 'ItemController');

这是我的 destroy() 方法:

public function destroy($id)
    
      $item = Item::find($id);
      $item->delete();

      return response()->json('Successfully Deleted');
    

这是我使用 axios 的删除功能:

export function deleteItem(data) 
  let url = BASE_URL+'/items';
  return axios.delete(url,data).then((response) => 
    return response;
  );

我对此做了一些研究,发现 laravel 也理解 '_method' 参数。所以我做到了以下几点:

export function deleteItem(data) 
  let url = BASE_URL+'/items';
  let payload = 'id' : data, '_method' : 'DELETE';
  return axios.post(url,payload).then((response) => 
    return response;
  );

但仍然没有运气。它总是抛出 405。对此有任何线索吗?

我正在使用最新版本的 axios 和 laravel。

【问题讨论】:

问题是 laravel 中的资源删除期望通过 url 发送一个 id。因此,将 url 更改为 smth:let url = BASE_URL_'/items/'+this.id; @LeoinstanceofKelmendi 太棒了!谢谢你的线索。完美运行。您能否将其添加为答案。? 【参考方案1】:

问题是 laravel 中的资源删除期望通过 url 发送 id

public function destroy($id)
   // ..find delete 

在您的情况下,您没有发送 id,因此 laravel 返回 notfoundhttpexception

因此,将 url 更改为 smth:let url = BASE_URL_'/items/'+this.id;

Controllers

【讨论】:

例外是methodNotAllowed @MahdiYounesi 删除的资源路由是 Route::delete('items/item', 'Controller');因此,当他向 url base_url+'/items' route not found 或 NOTFOUNDHTTPEXCEPTION NOT methodnotallowed 发送删除请求时,因为在资源中它只定义了一个删除路由。你会及时到达那里,你只需要多学一点。你对我投了反对票吗? 对不起,我知道了,稍微编辑一下我想收回投票,对不起 @MahdiYounesi 顺便说一句,你应该支持我的回答,因为你从中学到了一些新东西。 我理解我的错误。我的控制器期望/$id 在 URL 中通过 DELETE 请求。但我只是向 /items URL 发送 DELETE 请求,这显然没有定义为使用 DELETE 方法的路由。再次感谢。

以上是关于Laravel 资源控制器 DELETE 使用 Axios 抛出 405的主要内容,如果未能解决你的问题,请参考以下文章

没有 id 的 Laravel 资源路由销毁(DELETE)

如何使用 Laravel 发出删除请求

Laravel Ajax 使用按钮删除记录

路由资源更新和删除无法使用除存储 laravel 8 之外的多个角色

Laravel - DELETE 方法不支持删除路由

Laravel 路由可选参数到控制器