Raden Kriting
Raden Kriting

Reputation: 311

passing data from the view to the controller, where the data comes from another controller

So, I have 2 views, and 2 controllers. The first view, lets call it "A", contain form to grab all user information when registering account. After submitting, the first controller, lets call it "X" will catch those information inputs as an array, then return my second view, lets call it "B" with those array through it. and finally this B will show the user about what already inputted, as a review.

So this is like:

View A => Controller X => View B => Controller Y => Database

The A view :

my first form, those choose plan only send jquery action to hide this form and to display 'block' the other form

the other form

Im sorry to show you those images without codes, but i believe, you can understand the structure by just looking my X controller.

X Controller :

public function storeRegister(Request $request)
{   
    $validator = Validator::make($request->all(), [
        'name' => ['required', 'string', 'max:255', 'regex:/^[a-zA-Z ]+$/'],
        'gender' => ['required', 'string'],
        'birth_place' => ['required', 'string', Rule::notIn(['', '0'])],
        'birth_date' => ['required', 'date', 'date_format:Y-m-d', 'after:1900-01-01', 'before:today'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'phone_number' => ['required', 'string', 'min:9', 'max:15', 'regex:/^[0-9]+$/', 'unique:users'],
        'address_province' => ['required', 'string', Rule::notIn(['', '0'])],
        'address_regency' => ['required', 'string', Rule::notIn(['', '0'])],
        'address_district' => ['required', 'string', Rule::notIn(['', '0'])],
        'specify_address' => ['required', 'string', 'max:75'],
        'package_plan' => ['required', 'string'],
    ]);

    if($validator->fails()) {
        return back()->withErrors($validator)->withInput();
    }
    else {
        $user = new User();
        $user->package_plan = $request->get('package_plan');
        $user->name = $request->get('name');
        $user->gender = $request->get('gender');
        $user->birth_place = DB::table('provinces')
        ->where('id', $request['birth_place'])->pluck('name');
        $user->birth_date = $request->get('birth_date');
        $user->address_province = DB::table('provinces')
        ->where('id', $request['address_province'])->pluck('name');
        $user->address_regency = DB::table('regencies')
        ->where('id', $request['address_regency'])->pluck('name');
        $user->address_district = DB::table('districts')
        ->where('id', $request['address_district'])->pluck('name');
        $user->specify_address = $request->get('specify_address');
        $user->email = $request->get('email');
        $user->phone_number = $request->get('phone_number');

        $birth_placeExplode = explode('"', $user->birth_place);
        $address_provinceExplode = explode('"', $user->address_province);
        $address_regencyExplode = explode('"', $user->address_regency);
        $address_districtExplode = explode('"', $user->address_district);

        $user->birth_place = $birth_placeExplode[1];
        $user->address_province = $address_provinceExplode[1];
        $user->address_regency = $address_regencyExplode[1];
        $user->address_district = $address_districtExplode[1];

        $data = [
            'package_plan' => $user->package_plan,
            'name' => $user->name,
            'gender' => $user->gender,
            'birth_place' => $user->birth_place,
            'birth_date' => $user->birth_date,
            'address_province' => $user->address_province,
            'address_regency' => $user->address_regency,
            'address_district' => $user->address_district,
            'specify_address' => $user->specify_address,
            'email' => $user->email,
            'phone_number' => $user->phone_number,
        ];

        return view('layouts.pages.review')->with('data', $data);
    }
}

as you can see, I passing the $data to my B view. in my B view, user can see all values from the previous form, so if theres a typos or anything like that, they can go back, and fix it before submitting to DB.

The B view :

<form class="register-form" method="POST" action="{{route('saveRegister')}}">
                    @csrf
                    <div id="review" class="form-wrapper text-center">
                        <div class="form-group-reg">
                            <p>Paket Dipilih : <span id="package-rev">{{$data['package_plan']}}</span></p>
                            <p>Nama : <span id="name-rev">{{$data['name']}}</span></p>
                            <p>Jenis Kelamin : <span id="gender-rev">{{$data['gender']}}</span></p>
                            <p>Tempat Lahir : <span id="birth_place-rev">{{$data['birth_place']}}</span></p>
                            <p>Tanggal Lahir : <span id="birth_date-rev">{{$data['birth_date']}}</span></p>
                            <p>Email : <span id="email-rev">{{$data['email']}}</span></p>
                            <p>Nomor Telepon : <span id="phone_number-rev">{{$data['phone_number']}}</span></p>
                            <p>Provinsi : <span id="address_province-rev">{{$data['address_province']}}</span></p>
                            <p>Kotamadya/Kabupaten : <span id="address_regency-rev">{{$data['address_regency']}}</span></p>
                            <p>Kecamatan : <span id="address_district-rev">{{$data['address_district']}}</span></p>
                            <p>Alamat Lengkap : <span id="specify_address-rev">{{$data['specify_address']}}</span></p>                      
                        </div>
                        <div class="form-group-reg">
                            <a href="/register#identity"><input class="back-button" type="button" value="Back" /></a>
                            <input id="submit" class="regsubmit form-submit" type="submit" name="submit" value="Submit" />
                        </div>
                    </div>
                </form>

this is how my B view Looks like : enter image description here

what I want, how this array that called in B, can be stored in my database through another controller, lets call it "Y".

I've tried something like this but didnt work XD :

public function saveReview($data) {

    $user = new User();
    $user->package_plan = $data['package_plan'];
    $user->name = $data['name'];
    $user->gender = $data['gender'];
    $user->birth_place = $data['birth_place'];
    $user->birth_date = $data['birth_date'];
    $user->address_province = $data['address_province'];
    $user->address_regency = $data['address_regency'];
    $user->address_district = $data['address_district'];
    $user->specify_address = $data['specify_address'];
    $user->email = $data['email'];
    $user->phone_number = $data['phone_number'];

    $user->save();
    return redirect('/');
}

I hope my question is clear, and thank you so much for all the answers

Upvotes: 0

Views: 48

Answers (1)

MalcolmInTheCenter
MalcolmInTheCenter

Reputation: 1605

You need to do hidden inputs to pass the data to your controller

<div id="review" class="form-wrapper text-center">
    <div class="form-group-reg">
        .....
        <p>Tempat Lahir : <span id="birth_place-rev">{{$data['birth_place']}}</span></p>
        <input type="hidden" name="birth_place" value="{{$data['birth_place']}}">
        .....
    </div>
</div>

You should apply your validation checks on the hidden inputs on Controllyer Y in case they get modified.

Upvotes: 1

Related Questions