Laravel - 从返回的数组输入设置复选框的选中属性

时间:2014-11-18 21:01:35

标签: php arrays laravel

我遇到问题,我正试图处理

return Redirect::to('page')->withInput();

使用复选框数组时调用。基本上,如果我的验证器失败,我想返回,显示一些错误并使用它们的值重新填充输入。以下是我遇到困难的输入。

<div class="row">
  <div class="col-xs-12">
    <label class="checkbox-inline">
      <input type="checkbox" name="rms_cs[]" value="Marshall and Swift Property Valuation" {{ (Input::old("rms_cs[]") == "Marshall and Swift Property Valuation") ? "checked":"" }}> Marshall &amp; Swift Property Valuation
    </label>
  </div>
</div>
<div class="row">
  <div class="col-xs-12">
    <label class="checkbox-inline">
      <input type="checkbox" name="rms_cs[]" value="Premises Liability Survey" {{ (Input::old("rms_cs[]") == "Premises Liability Survey") ? "checked":"" }}> Premises Liability Survey
    </label>
  </div>
</div>

所以,基本上,我有多个复选框,每个复选框都有name="rms_cs[]"value="something"。返回Input时,如何将checked属性设置为checked

注意:我有很多文本框和单选按钮可以正常工作,所以我知道问题并不在于Input::old("rms_cs[]")以外的任何问题。我认为问题是rms_cs[]是一个索引数组;即rms_cs[0] = "Something"而非rms_cs["Premises Liability Survey"] = "Something"

如果有人能够对此有所了解/提供更好的方法来处理这样的事情,那就太棒了。

2 个答案:

答案 0 :(得分:1)

您可以使用Laravel Form&amp; HTML构建器来实现您的目标,并在您的控制器中执行一些额外的工作。

在您的控制器中,您手动构建一个复选框数组,如下所示:

$boxes = array();
$checkboxInput = Input::get('box');
foreach ($checkboxInput as $box) {
    $boxes[$box] = true;
}

然后返回$ box:

return Redirect::back()->withInput()->with('boxes',$boxes);

接下来在您的刀片文件中,您使用Form类将默认选中的值设置为true或false,如下所示:

{{Form::checkbox('box[]', 'box1', isset($boxes['box1']) && $boxes['box1'])}}
{{Form::checkbox('box[]', 'box2', isset($boxes['box2']) && $boxes['box2'])}}

现在你应该看到一些复选框已被检查。

答案 1 :(得分:1)

所以,我最终搞清楚了。我改变了

name="rms_ssp[]"

在每个复选框上:

name="rms_ssp[epis]"
name="rms_ssp[mrp]"

等,因此数组不再被索引。然后,我从旧输入中创建了一个变量:

<?php $rms_ssp = Input::old('rms_ssp'); ?>

并在每个复选框中添加了此检查:

{{ (isset($rms_ssp['epis'])) ? "checked":"" }}
{{ (isset($rms_ssp['mrp'])) ? "checked":"" }}

这就是诀窍。