Многоступенчатая форма в Laravel - PullRequest
1 голос
/ 16 марта 2020

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

Данные будут сохранены в таблица "пользователи".

Я новичок в Laravel, и я следовал этому: https://www.5balloons.info/multi-page-step-form-in-laravel-with-validation/

В моем FormController у меня есть эти методы:

public function index(Request $request)
{
    $request->session()->forget('user');
    $user = User::all();
    return view('form.index',compact('user',$user));
}

public function updateStep1(Request $request)
{
    $user = $request->session()->get('user');
    return view('form.update-step1',compact('user', $user));
}

public function postupdateStep1(Request $request)
{

    $validatedData = $request->validate([
        'first_name' => 'required',
    ]);

    if(empty($request->session()->get('user'))){
        $user = User::where('id',auth()->user()->id)->first();
        $user->fill($validatedData);
        $request->session()->put('user', $user);
    }else{
        $user = $request->session()->get('user');
        $user->fill($validatedData);
        $request->session()->put('user', $user);
    }
    return redirect('/form/update-step2');

}

public function updateStep2(Request $request)
{
    $user = $request->session()->get('user');
    return view('form.update-step2',compact('user', $user));
}

public function postupdateStep2(Request $request)
{
    $validatedData = $request->validate([
        'address' => 'required',
    ]);

    if(empty($request->session()->get('user'))){
        $user = User::where('id',auth()->user()->id)->first();
        $user->fill($validatedData);
        $request->session()->put('user', $user);
    }else{
        $user = $request->session()->get('user');
        $user->fill($validatedData);
        $request->session()->put('user', $user);
    }
    return redirect('/form/store');

}

public function store(Request $request)
{
    $user = User::where('id',auth()->user()->id)->first();
    $user = $request->session()->get('user');
    $user->save();
    return redirect('/form');
}

И это Маршруты:

Route::get('/form', 'FormController@index');

Route::get('/form/update-step1', 'FormController@updateStep1');
Route::post('/form/update-step1', 'FormController@postupdateStep1');

Route::get('/form/update-step2', 'FormController@updateStep2');
Route::post('/form/update-step2', 'FormController@postupdateStep2');

Route::post('/form/store', 'FormController@store');

Это первая часть формы:

@extends('layouts.app')

@section('content')
    <h1>update - Step 1</h1>
    <form action="/form/update-step1" method="post">
        @csrf
        <div class="form-group">
            <label for="name">First Name</label>
            <input type="text" value="{{ old('first_name', $user->first_name ?? null) }}" class="form-control" name="name">
        </div>

        @if ($errors->any())
            <div class="alert alert-danger">
                <ul>
                    @foreach ($errors->all() as $error)
                        <li>{{ $error }}</li>
                    @endforeach
                </ul>
            </div>
        @endif
        <button type="submit" class="btn btn-primary">Continue</button>
    </form>
@endsection

Я получаю сообщение об ошибке, утверждая, что поля обязательны для заполнения. Поэтому, даже если я введу имя et c., Это не сработает. Если я удаляю проверки, кажется, что все работает, но данные не добавляются в базу данных.

Есть предложения?

1 Ответ

0 голосов
/ 16 марта 2020

Вы должны использовать имя ввода first_name, потому что вы использовали first_name в проверке.

<input type="text" value="{{ old('first_name', $user->first_name ?? null) }}" class="form-control" name="first_name">

ИЛИ

Если хотите изменить имя в таблице user:

FormController

 $validatedData = $request->validate([
    'name' => 'required',
]);

первая часть формы:

<input type="text" value="{{ old('name', $user->name ?? null) }}" class="form-control" name="name">
...