Laravel-验证失败后预填充输入数据

时间:2018-10-08 23:46:48

标签: php laravel

我使用了5.4,并且在转换控制器中有一个索引动作,该动作显示了表单,然后在转换控制器中计算了另一个动作。因此该表单具有从货币,金额,到货币的输入,并且所有这些都是必需的。

这是我要进行计算操作的验证:

    $this->validate(request(), [
        'from_currency' => 'required|min:3|max:3|alpha',
        'to_currency' => 'required|min:3|max:3|alpha',
        'amount' => 'required|numeric',
    ]);

如果验证失败,我希望在显示错误时使用它的形式,它会预先填充输入内容。

有没有可以用于Request的功能?我知道如何获取刀片内部的域/路径,例如Request :: root(),并且还在视图中尝试了Request :: input('from_currency),但不起作用。

我什至尝试设置视图数据,例如'from_currency'=> request('from_currency'),它为空。有想法吗?

3 个答案:

答案 0 :(得分:1)

当您验证表单失败时,您可以使用所有已提交的输入重定向到同一页面

    $validator = Validator::make($request->all(), [
        'from_currency' => 'required|min:3|max:3|alpha',
        'to_currency' => 'required|min:3|max:3|alpha',
        'amount' => 'required|numeric',
    ]);

    if ($validator->fails()) {
        return redirect('index')
                    ->withErrors($validator)
                    ->withInput();
    }

在刀片视图中,您可以通过使用old助手来显示旧值

<input type="text" name="from_currency" value="{{ old('from_currency') }}">
<input type="text" name="to_currency" value="{{ old('to_currency') }}">
<input type="text" name="amount" value="{{ old('amount') }}">

答案 1 :(得分:0)

尝试一下

在刀片文件中,确保输入内容如下:

<input type="text" ... value="{{ old('from_currency') }}" ... >.

然后在您的控制器中...

if($validation->fails()) {
    return redirect()->back()->withInput();
  }

答案 2 :(得分:0)

您也可以使用 Validate 而不是 Validator::make。

例如

 $this->validate($request, [
        'question' => "required|min:10|max:100",
        'answer' => "required|min:20|max:300",
        'rank' => "required|numeric|gt:0|lt:100",
    ]);

然后在你的表单中使用

 <input type="text" class="form-control" id="question" name="question" value="{{ old('question') }}">

如果验证器失败,这将自动重定向回输入。

这样,您不必必须包含

if($validation->fails()) {
    return redirect()->back()->withInput();
  }