首页 > 解决方案 > Laravel:检查验证器失败的原因

问题描述

我正在使用两个规则对属性进行验证:requiredunique. 与和att1结合的属性在数据库中应该是唯一的。由于不同的失败原因,我想在不同的地方显示错误消息。例如,如果验证由于规则而失败,我想在一个 div 中显示错误消息,如果由于规则而失败,我想在另一个 div 中显示错误消息。 att2att3requiredunique

这是我的验证器:

$messages = [
        'att1.unique' => 'Given combination has already been registered.',
        'att1.required' => 'Please select att1',
        'att2.required' => 'Please select your att2',
        'att3.required' => 'Please select your att3',
    ];
    return Validator::make($data, [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'string', 'min:6', 'confirmed'],
        'att1' => [
            'bail','required',
            Rule::unique('users')->where(function ($query) use($attr1,$attr2,$attr3) {
                return $query->where('att1', $attr1)
                ->where('att2', $attr2)
                ->where('att3', $attr2);
            }),
        ],
        'att2' => ['required'],
        'att3' => ['required'],
    ],$messages);

当它们发生时,att1.unique如何在不同的地方显示错误消息?att1.required

标签: phplaravelvalidation

解决方案


您需要执行以下两个条件检查。

if ($errors->has('att1')) {
    foreach ($errors->get('att1') as $error) {
        // This would list all errors for the att1 field
        // Then it's just a simple conditional statement to
        // check if it's the error you want
        if($error == 'Please select att1') {} 
    }
}

并重复这个独特的规则。我似乎找不到另一种更好的方法来做到这一点。

您可以查看有关如何检索特定字段的错误的文档。


推荐阅读