Laravel 5.8 при ошибке проверки возвращается к определенному представлению со всеми входными данными - ›старый не работает

TL; DR;

(В Laravel 5.8) После ошибки проверки, как я могу вернуться к определенному представлению со всеми входными данными и ошибками?

Я создаю многоступенчатую форму, в которой мне нужно проверять ввод на каждом этапе. Поэтому я создал первую страницу как создаваемую, а затем последующие страницы для обновления.

На второй странице, когда валидатор не работает, я возвращаю конкретное представление, так как хочу, чтобы оно перешло в эту часть, а не в начало формы. Я также возвращаю ошибки и ввод в случае неудачи.

Контроллер:

if ($validator->fails()) {
    return view('partials.question_02_' . $type)
        ->with('type', $type)
        ->with('id', $id)
        ->withErrors($validator)
        ->withInput($request->all());
}

Вот моя логика проверки:

$validator = Validator::make($request->all(), [
    'email'               => 'required',
    'first_name'          => 'required',
    'last_name'           => 'required',
    'phone'               => 'required',
]);

Благодаря этому я могу вернуться к конкретному представлению и с ошибками проверки. Однако я не могу получить старый ввод.

Следующее в Blade покажет, что есть ошибка (появляется класс error), однако старый ввод не будет отображаться.

<input class="@if ($errors->has('first_name')) error @endif" 
type="text" name="first_name" placeholder="First Name" value="{{ old('first_name') }}">

* обратите внимание, я поместил его здесь только на двух строчках для удобочитаемости

Странно то, что если я умру и сброслю запрос, я увижу весь ввод:

dd($request->all());

Однако, если я попытаюсь получить его из сеанса, я не вижу никаких входных данных:

@if($errors)
    {{var_dump(Session::all())}}
@endif

Есть идеи, почему {{old ('first_name')}} не работает в этом случае?

Спасибо!


person Brad Ahrens    schedule 08.05.2019    source источник
comment
Можете ли вы добавить свою логику проверки?   -  person Aditya Thakur    schedule 08.05.2019
comment
Также вам не нужно передавать какие-либо параметры в ->withInput();   -  person Aditya Thakur    schedule 08.05.2019
comment
@AdityaThakur, я добавил логику валидации. Что вы думаете?   -  person Brad Ahrens    schedule 08.05.2019
comment
@AdityaThakur, когда я добавил - ›withInput (); без параметров это не удалось, что дало мне ошибку Undefined offset: 0   -  person Brad Ahrens    schedule 08.05.2019
comment
вместо return view () нужно return redirect (); return view загрузит новую страницу.   -  person Aditya Thakur    schedule 08.05.2019
comment
@AdityaThakur, я пробовал return redirect () - ›back () и return back (). К сожалению, оба они возвращают меня к шагу 1 вместо шага 2, на котором я сейчас. Я также пробовал return- ›redirect () -› view (), но это вызывало ошибку (Illuminate \ Routing \ Redirector :: view не существует.)   -  person Brad Ahrens    schedule 08.05.2019
comment
ваша вторая страница создается с использованием маршрута?   -  person Aditya Thakur    schedule 08.05.2019
comment
После отправки формы я создал его с помощью следующего кода: return view ('partials.question_02_'. $ Lead- ›type). Однако теперь я пытаюсь проверить, будет ли я перенаправляю на эту страницу вместо того, чтобы возвращать ее, сработает ли она. Возможно, это сохранит его на втором шаге при перенаправлении ›back ()   -  person Brad Ahrens    schedule 08.05.2019
comment
вы можете перенаправить на метод контроллера, который генерирует вашу вторую страницу return redirect()->action('LoginController@secondPage');   -  person Aditya Thakur    schedule 08.05.2019
comment
Превосходно! Это сработало! Мне пришлось добавить несколько параметров в тег действия, но это сработало! :) :) Большое спасибо @AdityaThakur! Если хотите, можете ответить, и я отмечу это как правильный ответ.   -  person Brad Ahrens    schedule 08.05.2019


Ответы (1)


Вы возвращаете представление return view(), вместо этого вам нужно вернуть перенаправление return redirect(), поскольку при возврате будет создана новая страница, а old () не будет работать.

Так что вместо

return view('partials.question_02_' . $type)

Использовать

return redirect()

&в твоем случае

redirect()->action('LoginController@secondPage'); //you controller and method handling your second page 
person Aditya Thakur    schedule 08.05.2019