php - Laravel 保存多部分表单
问题描述
我有一个由 3 部分组成的表单,我希望能够在每次提交后更新数据库。有一张表包含以下所有字段。
form1 asks for first and last name
form2 asks for email and phone
form3 asks for city and state
在我的控制器中,我有 3 个单独的函数来保存表单的每个步骤:
public function name(Request $request){
$lead = Lead::firstOrNew(123);
$lead->firstName = $request->get('firstName ');
$lead->lastName = $request->get('lastName');
$lead->save();
return redirect('/form2');
}
public function info(Request $request){
$lead = Lead::find(123);
$lead->email = $request->get('email');
$lead->phone = $request->get('phone');
$lead->save();
return redirect('/form3');
}
public function address(Request $request){
$lead = Lead::find(123);
$lead->city = $request->get('city');
$lead->state = $request->get('state');
$lead->save();
return redirect('/done');
}
有没有办法将它与一个更新功能结合起来?
解决方案
鉴于 HTTP 请求是无状态的(这意味着每个请求对之前和之后的请求一无所知),我宁愿您使用会话,这样您就可以像redirect
从一个form
请求到另一个请求一样存储信息。在这种情况下,您的代码应如下所示:
<?php
public function name(Request $request){
Session::put('nameData', $request->all()); //Store the info from form1 in session and redirect to form2
return redirect('/form2');
}
public function info(Request $request){
$validSessionData = Session::has('nameData');
if (!$validSessionData) { //Check if the user filled form1, if not, go back to form1
return redirect('/form1');
}
$nameAndInfo = Session::pull('nameData', []) + $request->all(); //Merge the info from form1 with info from form2. You could decide to keep them separate and merge later.
Session::put('nameAndInfo', $nameAndInfo);
return redirect('/form3');
}
public function address(Request $request){
$validSessionData = Session::has('nameAndInfo');
if (!$validSessionData) { Another check. You could also extend this by checking for form2 session data
return redirect('/form1');
}
$allData = Session::pull('nameAndInfo', []) + $request->all(); //Merge all session data
$lead = Lead::firstOrNew(123);
$lead->firstName = $allData['firstName'];
$lead->lastName = $allData['lastName'];
$lead->email = $allData['email'];
$lead->phone = $allData['phone'];
$lead->city = $allData['city'];
$lead->state = $allData['state'];
$lead->save();
return redirect('/done');
}
推荐阅读
- python - 查找使用“from something import *”导入的所有函数
- flutter - 如何在 Flutter 中使用带有 Switch 的 Hive - 所以当点击返回时,开关仍然被激活?
- javascript - 如何从动态加载的网页中提取内容(使用 MutationObservers)
- java - RabbitMQ 接收器未退出
- python - Python 根据我声明循环条件的方式做出不同的反应
- php - get_template_part 似乎正在删除 h2 上的一个类
- signals - 正交性在数字信号处理中逼近函数的重要性是什么?
- python - 如何摆脱 GridSpec 中的行之间的空间?
- php - 如何让 ACF 帖子对象只显示 1 个帖子?
- linear-programming - 有没有一种方法可以将某个值分配给 ILOG CPLEX 中的一组决策变量?