Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
У меня есть валидатор и функция которая возвращает ответ либо с ошибкой либо нет, и чтобы получить эти два ответа приходится во вью писать два разных кода, возможно ли собрать все ошибки в одном месте? Пробовал и withErrors(,); и просто with("errors",'В базе нет такого телефона!') и всё равно разный доступ к ним.
public function generateSms(Request $request)
{
$request->validate([
'phone' => 'required|string|max:255',
]);
$smscode = 12345;
$phone = $request->phone;
$user = User::where('phone',$phone)->update(['smscode' => $smscode]);
if(!$user){
return redirect()->route('phonelogin')->withErrors('В базе нет такого телефона!',"errors");
}
return redirect()->route('phonelogin')->with('success',"Вам отправлено смс с кодом!");
}
доступ во вью
{{ $errors->errors->first() }}
@if ($errors->any())
<div class="">
<ul>
@foreach($errors->all() as $error)
<li>
{{$error}}
</li>
@endforeach
</ul>
</div>
@endif
Изменено grafillo (03.06.2021 12:00:40)
Не в сети
Можете попробовать так:
$request->validate([
'phone' => 'required|string|max:255|exists:users,phone',
]);
Либо кидать Exception:
if(!$user){
throw ValidationException::withMessage([
'phone' => ["В базе нет такого телефона!"],
]);
}
Изменено stsepelin (03.06.2021 12:58:41)
Не в сети
получается что функция withErrors не функциональна и для неё отдельно в представление нужно код добавлять?
Не в сети
Функция withErrors кладет ошибки в сессию, в то время как ValidationException, который срабатывает и в первом и во втором варианте, перенаправляет нас на предыдущую страницу и возвращает объект с ошибками и “old data” (если я ничего не путаю). Забыл еще про третий вариант:
$validator = Validator::make($request->all(), [
‘phone’ => ‘required|string|max:255’,
]);
if ($validator->fails()) {
return redirect()->route(‘phonelogin’)->withErrors($validator)->withInput();
}
// CODE
if(!$user){
return redirect()->route(‘phonelogin’)->withErrors(“В базе нет такого телефона!“, “errors”)->withInput();
}
Не в сети
вы немного путаете объекты withErrors и Validator идентичны они отличаются очень незначительно,
объект withErrors:
Illuminate\Support\ViewErrorBag Object ( [bags:protected] => Array ( [errors] => Illuminate\Support\MessageBag Object ( [messages:protected] =>
Array ( [0] => Array ( [0] => В базе нет такого телефона! ) ) [format:protected] => :message ) ) )
и объект валидатора
Illuminate\Support\ViewErrorBag Object ( [bags:protected] => Array ( [default] => Illuminate\Support\MessageBag Object ( [messages:protected] => Array ( [smscode] => Array ( [0] => The smscode field is required. ) [phone] => Array ( [0] => The phone field is required. ) )
[format:protected] => :message ) ) )
Не в сети
Страницы 1