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