0

我环顾四周,但在使用 Laravel 8 FormRequest 类验证传入请求之前,我无法找到一种方法来执行资源的存在性检查。

基本上,例如,当 PUT/PATCH 请求用于更新资源时,我想执行以下步骤:

  1. 检查请求的资源是否存在
  2. 检查用户是否有权进行更新
  3. 验证请求的字段
  4. 更新资源
  5. 将响应发送回用户

根据我的阅读,在 FormRequest 中执行第 2 步和第 3 步很容易,而第 4 步和第 5 步可以在控制器中完成(或在服务中执行 4 步,在控制器中执行 5 步)。

我缺少的是如何在一开始就执行第 1 步。我已经看到了一些解决方法,例如How to throw a 404 in Laravel Form Request with custom Rule可能与How to validate Route Parameters in Laravel 5? 但我觉得这不是实现我想做的事情的正确方法......

通过 Controller 中的存在性检查,用户首先可以发出有效请求,即使他试图更新不存在的资源(因为框架在调用 Controller 方法之前抛出 ValidationException)并且不会听起来不错。

关于如何在存在检查后“延迟”验证的任何建议可以实现?否则,我应该完全放弃使用 FormRequests 吗?

提前致谢!

4

2 回答 2

0

您要查找的是数据库事务。只有在一切正常的情况下,它才会确保执行请求。欲了解更多信息https://laravel.com/docs/5.8/database#database-transactions

于 2021-09-18T21:14:17.977 回答
0

事实证明,这是向控制器类型提示资源时的默认设置。首先是存在检查,然后是授权,然后才是验证。

于 2022-01-22T22:34:25.257 回答