【问题标题】:Laravel - prepopulate input data after validation failedLaravel - 验证失败后预填充输入数据
【发布时间】:2019-03-13 16:02:26
【问题描述】:

我使用了 5.4,并且我在转换控制器中有一个索引操作,它显示了表单,然后在转换控制器中计算了另一个操作。所以表单有from-currency、amount、to-currency输入,所有这些都是必需的。

这是我对计算操作的验证:

    $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') 并且它是空白的。有什么想法吗?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    试试这个

    在您的刀片文件中,确保您的输入具有以下内容:

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

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

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

    【讨论】:

    • 谢谢你的帮助。
    【解决方案2】:

    当您验证表单时,如果请求失败,您可以重定向到包含所有已提交输入的同一页面

        $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') }}">
    

    【讨论】:

    • 嗨。所以我已经索引并计算了行动。如果错误,我将重定向回索引,但如果验证良好,则继续计算,我仍然显示表单,以便他们可以输入不同的数据并再次计算。但是我如何将数据再次预填充到表单中,因为旧的似乎不起作用。请注意,我对 2 个操作使用了相同的刀片文件。我在刀片中尝试了 request() 并且不起作用。
    • 刚刚发现可以将第二个参数传递给 old('from_currency', $from_currency)
    【解决方案3】:

    您也可以使用 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();
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-29
      • 2017-11-23
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多