You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:20:16