Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel:检查验证程序失败的原因_Php_Laravel_Validation - Fatal编程技术网

Php Laravel:检查验证程序失败的原因

Php Laravel:检查验证程序失败的原因,php,laravel,validation,Php,Laravel,Validation,我使用两个规则对属性执行验证:必需和唯一。属性att1与att2和att3组合在数据库中应该是唯一的。我想在视图中的不同位置显示错误消息,原因不同。例如,如果验证因required规则而失败,我想在一个div中显示错误消息,如果验证因unique规则而失败,我想在另一个div中显示错误消息 这是我的验证器: $messages = [ 'att1.unique' => 'Given combination has already been registered.',

我使用两个规则对属性执行验证:
必需
唯一
。属性
att1
att2
att3
组合在数据库中应该是唯一的。我想在视图中的不同位置显示错误消息,原因不同。例如,如果验证因
required
规则而失败,我想在一个div中显示错误消息,如果验证因
unique
规则而失败,我想在另一个div中显示错误消息

这是我的验证器:

$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
的错误消息?

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

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') {} 
    }
}
并对唯一规则重复此操作。我似乎再也找不到比这更好的方法了


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

谢谢!成功了。有一个小问题:for循环是否可以避免,因为
$errors->get('att1')
总是只有一个值。如果输入中未提供该值,则由于
bail
规则的原因,
required
验证失败,并且未检查
unique
规则。如果
unque
验证失败,则表示已给出输入,
required
规则不能失败。我尝试了
if($errors->get('att1')=='请选择att1'){$errors->first('att1')}
,但没有显示任何内容。在这种特殊情况下,您可以使用
$errors->first('att1')