Я выполняю проверку атрибута с двумя правилами: required и unique. Атрибут 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') {}
}
}
и повторите это для уникального правила. Кажется, я не могу найти другого лучшего способа сделать это.
Вы можете проверить документация, чтобы узнать, как извлекать ошибки для определенного поля.
В данном случае можно использовать $errors->first('att1') :)
Спасибо ! Это сработало. Небольшой вопрос: можно ли избежать этого цикла for, потому что
$errors -> get('att1')всегда имеет только одно значение. Если значение не указано во входных данных, проверкаrequiredзавершится ошибкой и правилоuniqueне проверяется из-за правилаbail. И если проверкаunqueзавершилась неудачно, это означает, что введены данные и правилоrequiredне может завершиться ошибкой. Я попробовалif ($errors->get('att1') == 'Please select att1') { $errors->first('att1') }, но он ничего не отобразил.