Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 03.06.2021 12:00:15

Как собрать все ошибки в одном месте

У меня есть валидатор и функция которая возвращает ответ либо с ошибкой либо нет, и чтобы получить эти два ответа приходится во вью писать два разных кода, возможно ли собрать все ошибки в одном месте? Пробовал и 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)

Не в сети

#2 03.06.2021 12:58:07

stsepelin
Откуда: Estonia
Сообщений: 43

Re: Как собрать все ошибки в одном месте

Можете попробовать так:

$request->validate([
    'phone' => 'required|string|max:255|exists:users,phone',
]);

Либо кидать Exception:

if(!$user){
    throw ValidationException::withMessage([
        'phone' => ["В базе нет такого телефона!"],
    ]);
}

Изменено stsepelin (03.06.2021 12:58:41)

Не в сети

#3 03.06.2021 13:52:41

Re: Как собрать все ошибки в одном месте

получается что функция withErrors не функциональна и для неё отдельно в представление нужно код добавлять?

Не в сети

#4 03.06.2021 15:03:45

stsepelin
Откуда: Estonia
Сообщений: 43

Re: Как собрать все ошибки в одном месте

Функция 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();
}

Не в сети

#5 03.06.2021 15:50:58

Re: Как собрать все ошибки в одном месте

вы немного путаете объекты 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 ) ) )

Не в сети

Подвал раздела