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的主要内容,如果未能解决你的问题,请参考以下文章