php - 将数据从视图传递到控制器,其中数据来自另一个控制器
问题描述
所以,我有 2 个视图和 2 个控制器。第一个视图,我们称之为“A”,包含在注册帐户时获取所有用户信息的表单。提交后,第一个控制器,我们称之为“X”,会将这些信息输入作为一个数组捕获,然后返回我的第二个视图,让这些数组通过它称之为“B”。最后这个 B 将向用户展示已经输入的内容,作为评论。
所以这就像:
视图 A => 控制器 X => 视图 B => 控制器 Y => 数据库
A 视图:
很抱歉向您展示那些没有代码的图像,但我相信,您只需查看我的 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 中调用的这个数组如何通过另一个控制器存储在我的数据库中,我们称之为“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('/');
}
我希望我的问题很清楚,非常感谢您的所有答案
解决方案
您需要进行隐藏输入以将数据传递给您的控制器
<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 上的隐藏输入应用验证检查,以防它们被修改。
推荐阅读
- android-studio - Android Studio 3.4 卡在索引项目上
- java - Spring 中对 List 或 Map 的响应正文
- javascript - 在 webpack 构建中包含捆绑的 webpack 文件
- angular - 如何更改 Angular Material Datepicker 主题?
- node.js - 保存和检索 req.session 的内容
- python - sqlalchemy ArgumentError:文本 SQL
- java - 如何解析包含多种对象的字段的 Json
- vba - 在 VB.Net 中创建一个对象以在 VBA 中使用
- python - pandas 定位单行标签并将结果转换为数据框
- python - 仅获取数据框中每个主题的第一行