【问题标题】:Repopulate checkbox fields in the form after validation in laravel 5在 laravel 5 中验证后重新填充表单中的复选框字段
【发布时间】:2019-05-13 07:08:54
【问题描述】:

我试图在 Laravel 中验证后重新填充复选框字段。实际上复选框字段名称为数组。示例:

<form name="" action="" method="post">
<div class="row>
   <input type="checkbox" name="models[]" value="1">Model 1
   <input type="checkbox" name="models[]" value="2">Model 2
   <input type="checkbox" name="models[]" value="3">Model 3
   <input type="checkbox" name="models[]" value="4">Model 4
   <input type="checkbox" name="models[]" value="5">Model 5
</div>
<div class="row>
   <input type="checkbox" name="model_name" value="" placeholder="Model Name">       
</div>
<div class="row>
<input type="submit" name="submit" value="submit">
</div>
</form>

我的表单将如下所示。所以提交表单后会有一个验证错误,我需要在验证错误后重新填充复选框值。我已经尝试使用 {{ old('field_name') }} 将复选框设置为选中状态。但它不起作用。任何人都有解决此问题的解决方案?

【问题讨论】:

    标签: validation checkbox laravel-5.4


    【解决方案1】:

    你已经接近了!如果检测到 model_name 的旧值,您只需在 &lt;input&gt; 元素中添加“已检查”一词,即可“重新激活”已检查的方式。

    <input type="checkbox" name="model_name" value="" placeholder="Model Name">
           @if (old('model_name'))
               checked
           @endif
    />
    

    【讨论】:

    • 但是复选框名称被定义为数组。这对它有用吗?
    • 忘记了您的阵列,抱歉!让我想一想。不过,对于您的最后一个输入元素,它会起作用。
    • 我现在想不出一个 100% 正确的解决方案,但一种可能的方法是检查你的 PHP 是否设置了 'models' 数组,然后返回每个值或名称检查模型回到视图。在那里,您检查您在 PHP 中收到的值是否存在,并在该 'input' 元素中添加属性 'checked'。希望它更清楚一点。如前所述,我的解决方案适用于您的最后一个输入元素(name='model_name'),但很抱歉我无法进一步帮助您处理数组(除了提供可能的方法)。
    • 感谢您的想法。但问题是我正在使用 laravel 框架进行开发。因此,在验证错误之后,我将使用以下代码返回页面。 if ($validator->fails()) { return redirect()->back()->withInput()->withErrors($validator); }
    • 不客气,这是我至少可以尝试的!除了您上次的回复之外,我可以建议的一件事是您可以将 '->with($array_with_variables)' 添加到该返回请求中。该数组可能包含您检查的数据。每当您在此类请求中使用 '->with($some_variable)' 时,$some_variable 的数据将在视图中提供给您。
    【解决方案2】:

    我在 Laravel 5.5 中尝试过类似于下面的代码

    <input type="checkbox" name="models[]" value="1" @if( is_array(old('models')) && in_array(1, old('models'))) checked @endif  >Model 1
    

    【讨论】:

      【解决方案3】:

      这对我有用(Laravel 5.2)

      @foreach ($models as $model)
          <input type="checkbox" name="models[{{ $model->id }}]"
              @if (is_array(old('models')) && in_array($model->id, array_keys(old('models'))))
                  checked
              @endif
          > {{ $model->name }}
      @endforeach
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-06
        • 2014-10-08
        • 1970-01-01
        • 2018-12-09
        • 2014-10-10
        • 2015-03-06
        相关资源
        最近更新 更多