首页 > 解决方案 > 将数据从视图传递到控制器,其中数据来自另一个控制器

问题描述

所以,我有 2 个视图和 2 个控制器。第一个视图,我们称之为“A”,包含在注册帐户时获取所有用户信息的表单。提交后,第一个控制器,我们称之为“X”,会将这些信息输入作为一个数组捕获,然后返回我的第二个视图,让这些数组通过它称之为“B”。最后这个 B 将向用户展示已经输入的内容,作为评论。

所以这就像:

视图 A => 控制器 X => 视图 B => 控制器 Y => 数据库

A 视图:

我的第一个表单,那些选择计划的人只发送 jquery 操作来隐藏这个表单并显示“阻止”另一个表单

另一种形式

很抱歉向您展示那些没有代码的图像,但我相信,您只需查看我的 X 控制器即可了解其结构。

X 控制器:

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);
    }
}

如您所见,我将 $data 传递给我的 B 视图。在我的 B 视图中,用户可以看到以前表单中的所有值,所以如果有错别字或类似的东西,他们可以返回并在提交给 DB 之前修复它。

B 观点:

<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>

这就是我的 B 视图的样子: 在此处输入图像描述

我想要什么,在 B 中调用的这个数组如何通过另一个控制器存储在我的数据库中,我们称之为“Y”。

我试过这样的东西,但没有用 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('/');
}

我希望我的问题很清楚,非常感谢您的所有答案

标签: phplaravel

解决方案


您需要进行隐藏输入以将数据传递给您的控制器

<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>

您应该对 Controllyer Y 上的隐藏输入应用验证检查,以防它们被修改。


推荐阅读