Laravel 中的 Route::delete 没有捕获 Request $request

Posted

技术标签:

【中文标题】Laravel 中的 Route::delete 没有捕获 Request $request【英文标题】:Route::delete in Laravel is not catching Request $request 【发布时间】:2016-10-07 20:08:38 【问题描述】:

这个网址 http://localhost:8888/api/v1/apartments/delete ,我正在尝试删除一个确定的公寓而不通过 URL 传递 id。我正在使用 POSTMAN 发送数据,但我无法使用 Request 或 Input 类捕获它。

Routes.php

Route::delete('/api/v1/apartments/delete', 'ApartmentApiController@destroy');

ApartmentApiController

public function destroy(Request $request)

  dd($request->all());

在 UPDATE Request 等方法中有效,但在 DELETE 中无效。为什么是这样?我有点好奇,我还没有找到。

像这样删除在 URL 中传递项目 id 是一个好习惯吗?我应该这样做吗? http://localhost:8888/api/v1/apartments/delete/13

【问题讨论】:

最好的做法不仅是在删除时在 URL 中包含 id(当您删除错误的内容时更容易从日志中找到发生的情况),而且在删除时需要某种形式的确认任何数据库对象(它可以防止通过 XSS 删除项目)。 只是一个旁注,我遇到了邮递员和 Laravel 的问题;通过实际的 post 路由发送数据是可行的,但使用 postman 执行 post 请求则不行。最终不得不切换到不同的 REST 客户端;可能您也遇到过这种情况,但很难确定。 @grochmal 这一切都由 JWT 保护,但感谢您的建议。 【参考方案1】:

由于您在路线中传递了id:

Route::delete('apartments/delete/id', 'ApartmentApiController@destroy');

您需要将其与 Request 对象一起注入您的方法中。

public function destroy($id, Request $request)

  dd($id);

【讨论】:

【参考方案2】:

刚刚遇到同样的问题。我发现我必须将标题从Accept: application/json更改为content-type: application/json...

【讨论】:

以上是关于Laravel 中的 Route::delete 没有捕获 Request $request的主要内容,如果未能解决你的问题,请参考以下文章

laravel 路由器

Laravel之路由

Laravel 6路线未定义

Laravel 控制器返回模型实例而不是数据内容

在 Laravel 5 中截断表格

Laravel 路由可选参数到控制器