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

I'm having a problem where I'm trying to handle a

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

call while using an array of checkboxes. Basically, if my validator fails, I want to return back, display some errors and repopulate inputs with their value. Here are the inputs I'm having difficulty with.

<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>

So, basically, I have multiple checkboxes, each with name="rms_cs[]" and value="something". How would I go about setting the checked property to checked when Input is returned?

Note: I have lots of text boxes and radio buttons that work fine, so I know that the issue doesn't lie with anything besides Input::old("rms_cs[]"). I think the issue is that rms_cs[] is an indexed array; ie rms_cs[0] = "Something" and not rms_cs["Premises Liability Survey"] = "Something"

If anyone could shed some light on this/provide a better way to handle something like this, that would be great.

So, I ended up figuring this out. I changed

name="rms_ssp[]"

on each checkbox to:

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

etc, so the array was no longer indexed. Then, I made a variable out of the old input:

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

And added this check in each of the checkboxes:

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

And that did the trick.

You may use Laravel Form&HTML builder to achieve what you want, plus doing some extra work in your controller.

In your controller, you manually construct a checkbox array as follows:

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

and then return with $boxes:

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

Next in your blade file, you use the Form class to set default checked value to either true or false like this:

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

And now you should see some checkboxes have been checked.