0

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.

2 Answers 2

1

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.

Sign up to request clarification or add additional context in comments.

2 Comments

Good answer, but I opted out of using the Form::checkbox by preference. I did manage to find a solution, and I'll post the answer in a bit. But +1 for the good suggestions.
@TimLewis Thanks. But a little clunky. Yours is simpler.
1

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.