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)