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

Laravel自定义扩展验证器如何返回精准自定义错误信息?

解决Laravel自定义数组验证器返回精准错误信息的问题

我来帮你搞定这个需求——原来的自定义验证器只返回布尔值,没法传递具体的错误细节,咱们可以通过操作主验证器的错误集合来实现精准提示。下面是具体的实现方案:

修改自定义验证器逻辑

核心思路是:在遍历校验每个商品时,如果发现错误,就把商品编号+具体字段错误的信息手动添加到主验证器的错误集合里,而不是只返回false。

修改后的扩展验证器代码如下:

Validator::extend('invoiceGoods', function($attribute, $value, $parameters, $validator) { 
    $rulesForGoods = [ 
        'no' => 'integer|required', 
        'name' => 'string|max:64|required', 
        'unit' => 'required|integer', 
        'qty' => 'required|string', 
        'price' => 'required|numeric', 
        'amount' => 'required|numeric', 
        'vat_percent' => 'nullable|numeric', 
        'vat_sum' => 'nullable|numeric', 
        'total_sum' => 'required|numeric' 
    ]; 

    foreach ($value as $good) { 
        // 注意:这里创建子验证器时不要覆盖主$validator变量
        $itemValidator = Validator::make($good, $rulesForGoods); 

        if ($itemValidator->fails()) { 
            // 获取当前商品的编号,如果没有则用"未知"兜底
            $goodsNo = $good['no'] ?? '未知';
            
            // 遍历子验证器的所有错误,构造精准提示并添加到主验证器
            foreach ($itemValidator->errors()->all() as $error) {
                $customError = "编号为{$goodsNo}的商品:{$error}";
                $validator->addError($attribute, $customError);
            }
            
            // 返回false终止后续验证
            return false;
        } 
    } 
    return true; 
});

为什么这样可行?

自定义验证闭包的第四个参数$validator就是主验证器的实例,我们可以调用它的addError方法直接向错误集合中添加自定义信息。这样当主验证器调用fails()时,返回的errors()里就包含了咱们构造的精准提示,比如:编号为1的商品:unit必须是整数。

主验证代码保持不变

你的主验证逻辑不需要修改,依然可以像之前那样返回错误响应:

$validator = Validator::make($data , [ 
    'goods' => 'invoiceGoods', 
    'sender_name' => 'string', 
    'recipient_name' => 'string', 
]); 

if ($validator->fails()) { 
    return response()->json([ 
        'success' => false, 
        'message' => 'Validation error.', 
        'data' => $validator->errors() 
    ]); 
}

这样返回的错误数据里就会包含类似["goods" => ["编号为1的商品:unit必须是整数"]]的精准提示了。

内容的提问来源于stack exchange,提问作者Василий Пупкин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:53:22