Laravel 5.8 при ошибке проверки возврата к конкретному виду со всеми входными данными -> старый не работает - PullRequest
3 голосов
/ 08 мая 2019

TLDR;

(в 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 class), однако, он не покажет старый ввод.

<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')}} не работает в этом случае?

Спасибо!

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Вы возвращаете представление 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 
0 голосов
/ 08 мая 2019

Почему вы не используете запрос формы?

Сначала создайте запрос формы для проверки

php artisan make:request MyFormRequest

в вашем файле / app / Http / Requests / MyFormRequest добавьте в ваш метод правил и измените метод авторизации

public function authorize()
{
    return true;
}

public function rules()
    {
        return [
        'email'               => 'required',
        'first_name'          => 'required',
        'last_name'           => 'required',
        'phone'               => 'required',
       ];
}

В вашем контроллере метод

/**
 * Add your form request as an parameter to your method:
 */

public function myMethod(MyFormRequest $request){
    //Call the validation function
    $validated = $request->validated();
}

Если проверка не пройдена, вы перенаправляете ответ пользователю. И вы сможете отслеживать ошибки.

Подтверждение Laravel

...