Laravel表单双提交按钮问题:返回表单时保留字段填充值
解决表单提交后返回时保留字段值的问题
看起来你遇到的核心问题是:点击返回表单的按钮时,用户输入的ordernumber和customername值没有被存入session,导致视图里的old()函数无法读取到之前提交的数据。下面给你两种可行的解决方案:
方案一:直接闪存请求输入(最简单)
当你需要返回表单页面并保留所有提交的输入值时,可以用Laravel的withInput()方法,它会自动把当前请求的所有输入数据闪存到session中,这样old()函数就能正常获取值了。修改你的控制器代码:
$retour->ordernumber = request('ordernumber'); $retour->customername = request('customername'); $retour->save(); if ($request->submit === 'submit') { return redirect('/return')->with('message', 'Approved'); } else { // 使用withInput()闪存所有提交的输入 return redirect('/return/create') ->with('message', 'Approved, you can make a new report.') ->withInput(); }
你的原视图代码不需要修改,{{ old('ordernumber') }}和{{ old('customername') }}就能自动填充之前提交的值了。如果只想保留特定字段,还可以给withInput()传指定字段数组:->withInput(['ordernumber', 'customername'])。
方案二:传递模型保存后的数据(适合用处理后的值)
如果你希望显示的是保存到数据库后的模型数据(比如字段有默认值或经过业务处理),可以把模型数据通过with()方法传递到视图,然后在视图里优先使用这些值, fallback到old():
修改控制器代码
$retour->ordernumber = request('ordernumber'); $retour->customername = request('customername'); $retour->save(); if ($request->submit === 'submit') { return redirect('/return')->with('message', 'Approved'); } else { // 把保存后的模型数据传递到视图 return redirect('/return/create') ->with('message', 'Approved, you can make a new report.') ->with('retour', $retour); }
修改视图代码
<div class="form-group"> <label>Ordernumber</label> <div class="input-group"> <div class="input-group-prepend"> <span class="input-group-text">653</span> </div> <input type="text" name="ordernumber" class="form-control" placeholder="Enter ordernumber" value="{{ isset($retour) ? $retour->ordernumber : old('ordernumber') }}"> </div> </div> <div class="form-group"> <label>Customername</label> <input type="text" name="customername" class="form-control" placeholder="Enter customername" value="{{ isset($retour) ? $retour->customername : old('customername') }}"> </div>
额外提示
别忘了确保你的表单里添加了@csrf令牌,这是Laravel表单提交的必要验证,否则请求可能会被框架拒绝。
内容的提问来源于stack exchange,提问作者Othman Boūlal
相关产品推荐
相关产品推荐

