Search code examples
laravelvalidationradio-button

Validating Arrays of radio buttons in laravel


I am using Laravel 5.1 and homestead.

My issue is when validation fails, the radio buttons do not repopulate with data from the original user's input.

My validation rules from PostRequest.php

public function rules()
    {
        //validating input text field --> this one works
        $rules = ['owner' => 'required|max:15',];

        //validating array of input text fields --> this too works
        foreach($this->request->get('item') as $a => $z)
        {
            $rules['item.'.$a] = 'required';
        }

        //validating array of radio buttons --> does not return with data
        foreach($this->request->get('radio') as $b => $y)
        {
            $rules['radio.'.$b] = 'required';
        }


        return $rules;
    }

A segment of my view(blade.php)

<div class="row">
    <div class="tcell col-xs-6">
        <label for="item[0]" class="sr-only"></label>
        <input class="form-control" id="item[0]" name="item[0]" type="text" placeholder="enter item" value="{ { old('item.0') } }"/>
    </div>
    <div class="tcell col-xs-6">
        <div class="radio">
            <input type="radio" id="s15" name="radio[0]" value="5" /><label for="s15" title="5">5</label>
            <input type="radio" id="s14" name="radio[0]" value="4" /><label for="s14" title="4">4</label>
            <input type="radio" id="s13" name="radio[0]" value="3" /><label for="s13" title="3">3</label>
            <input type="radio" id="s12" name="radio[0]" value="2" /><label for="s12" title="2">2</label>
            <input type="radio" id="s11" name="radio[0]" value="1" /><label for="s11" title="1">1</label>
        </div>
    </div>
</div>

 ...

    <div class="tcell col-xs-6">
        <div class="radio">
            <input type="radio" id="s20" name="radio[1]" value="5" /><label for="s20" title="5">5</label>
            <input type="radio" id="s19" name="radio[1]" value="4" /><label for="s19" title="4">4</label>
            <input type="radio" id="s18" name="radio[1]" value="3" /><label for="s18" title="3">3</label>
            <input type="radio" id="s17" name="radio[1]" value="2" /><label for="s17" title="2">2</label>
            <input type="radio" id="s16" name="radio[1]" value="1" /><label for="s16" title="1">1</label>
    </div>
</div>

The old() function worked for both input(text) and array of input(text). but I do not know how to apply it with radio buttons.

Thanks


Solution

  • Here's the solution

    <input type="radio" id="s15" name="radio[1]" value="5"  { { old('radio.1')=="5" ? 'checked='.'"'.'checked'.'"' : '' } } /><label for="s15" title="5">5</label>
    <input type="radio" id="s14" name="radio[1]" value="5"  { { old('radio.1')=="4" ? 'checked='.'"'.'checked'.'"' : '' } } /><label for="s14" title="4">4</label>
    ...
    

    This will only help redirect back with the inputed data, however, validation will still fail if nothing is selected since nothing gets submitted. The fix is to use for loop instead of foreach loop. You must get the count of the radio buttons to iterate.