Laravel中FormRequest验证失败时如何记录用户ID及请求信息
解决Laravel FormRequest验证失败时记录用户ID及请求参数的问题
你可以直接在重写的failedValidation方法中,借助FormRequest本身的实例获取当前用户信息和请求参数,将它们与验证错误信息一起记录到日志中。以下是修改后的代码:
use Illuminate\Validation\Validator; use Illuminate\Support\Facades\Log; class NewPostRequest extends FormRequest { public function authorize() { return true; } protected function failedValidation(Validator $validator) { // 获取当前用户ID(兼容未登录场景) $userId = $this->user()?->id; // 获取请求中需要记录的字段 $requestData = $this->only(['post', 'type']); // 组合并记录日志 Log::error('请求验证失败', [ 'user_id' => $userId, 'request_data' => $requestData, 'validation_errors' => $validator->failed() ]); return responder()->error()->respond(400); } public function rules() { return [ 'post' => 'present', 'type' => 'required|string|in:text,image,video', ]; } }
代码说明:
- 用户ID获取:
$this->user()是Laravel Request类内置方法,用于获取当前已认证的用户实例。使用?->id(PHP 8.0+支持)可安全处理用户未登录的情况,此时$userId会返回null。 - 请求参数获取:
$this->only(['post', 'type'])可精准提取你需要的字段;如果需要记录全部请求参数,替换为$this->all()即可。 - 结构化日志:将用户ID、请求数据、验证错误打包成关联数组传入
Log::error,日志会以结构化格式输出,便于后续排查问题。
修改后生成的错误日志示例:
[2024-05-20 12:34:56] local.ERROR: 请求验证失败 {"user_id":123,"request_data":{"post":null,"type":null},"validation_errors":{"post":{"Present":[]},"type":{"Required":[]}}}
内容的提问来源于stack exchange,提问作者Utku Dalmaz
相关产品推荐
相关产品推荐

