Как показать старые данные флажка в Laravel?

Я использую Laravel 5.3, это демонстрация формы ниже:

<div class="container">
    <form>
        <div class="form-group row">
            <label for="name" class="col-sm-2 col-form-label">Name</label>
            <div class="col-sm-10">
                <input type="text" class="form-control" id="name" name="name" value="{{ old('name', $student->name)}}">
            </div>
        </div>

        <fieldset class="form-group row">
            <legend class="col-form-legend col-sm-2">Gender</legend>
            <div class="col-sm-10">
                <div class="form-check">
                    <label class="form-check-label">
                        <input class="form-check-input" type="radio" name="gender" value="1" @if(old('gender',$student->gender)=="1") checked @endif>
                        Male
                    </label>
                </div>
                <div class="form-check">
                    <label class="form-check-label">
                        <input class="form-check-input" type="radio" name="gender" value="2" @if(old('gender',$student->gender)=="2") checked @endif>
                        Female
                    </label>
                </div>
            </div>
        </fieldset>
        <div class="form-group row">
            <label class="col-sm-2">Hobbies</label>
            <div class="col-sm-10">
                <div class="form-check">
                    <label class="form-check-inline">
                        <input class="form-check-input" type="checkbox" name="hobby[]" value="1" @if(...) checked @endif> football
                    </label>
                    <label class="form-check-inline">
                        <input class="form-check-input" type="checkbox" name="hobby[]" value="2" @if(...) checked @endif> basketball
                    </label>
                    <label class="form-check-inline">
                        <input class="form-check-input" type="checkbox" name="hobby[]" value="3" @if(...) checked @endif> swimming
                    </label>
                </div>

            </div>
        </div>
        <div class="form-group row">
            <div class="offset-sm-2 col-sm-10">
                <button type="submit" class="btn btn-primary">Submit</button>
            </div>
        </div>
    </form>
</div>

Мой вопрос:

Я могу показать старые данные в input type="text" следующим образом:

<input type="text" class="form-control" id="name" name="name" value="{{ old('name', $student->name)}}">

И я могу показать старые данные в input type="radio" следующим образом:

<input class="form-check-input" type="radio" name="gender" value="1" @if(old('gender',$student->gender)=="1") checked @endif>

Но я не знаю, как показать старые данные в input type="checkbox":

<input class="form-check-input" type="checkbox" name="hobby[]" value="3" @if(...) checked @endif>

Как это сделать?

Ответы

Ответ 1

Это будет работать:

        <div class="form-check">
            <label class="form-check-inline">
                <input class="form-check-input" type="checkbox" name="hobby[]" value="1" @if(is_array(old('hobby')) && in_array(1, old('hobby'))) checked @endif> football
            </label>
            <label class="form-check-inline">
                <input class="form-check-input" type="checkbox" name="hobby[]" value="2" @if(is_array(old('hobby')) && in_array(2, old('hobby'))) checked @endif> basketball
            </label>
            <label class="form-check-inline">
                <input class="form-check-input" type="checkbox" name="hobby[]" value="3" @if(is_array(old('hobby')) && in_array(3, old('hobby'))) checked @endif> swimming
            </label>
        </div>

Также как brokekidweb предложил:

<label class="form-check-inline">
    <input class="form-check-input" type="checkbox" name="hobby[]" value="1" {{ (is_array(old('hobby')) and in_array(1, old('hobby'))) ? ' checked' : '' }}> football
</label>

ИЛИ

<label class="form-check-inline">
    <input class="form-check-input" type="checkbox" name="hobby[]" value="1" {{ (is_array(old('hobby')) && in_array(1, old('hobby'))) ? ' checked' : '' }}> football
</label>

Ответ 2

Вы можете использовать

<input class="form-check-input" type="checkbox" name="hobby[]" value="3" @if(in_array(3, old('hobby'))) checked @endif>

Или вы можете просто переключиться на использование Laravel Collective https://laravelcollective.com/docs/5.3/html#checkboxes-and-radio-buttons

И вместо этого есть код:

{!! Form::checkbox('name', 'value', true) !!}

Ответ 3

1-й путь

Сначала создайте переменную

$hob = old('hobby');

и чем проверка - массив или нет

echo is_array($hob)? (in_array(1, $hob)?'checked':NULL): NULL;

а затем применить его.

<input class="form-check-input" type="checkbox" name="hobby[]" value="1" <?php echo is_array($hob)? (in_array(1, $hob)?'checked':NULL): NULL;?>> football

2-й путь

ИЛИ вы можете это сделать, но в этом случае вы не создадите переменную

@if(is_array(old('hobby')) && in_array(1,old('hobby'))) checked @endif

а затем применить его.

<input class="form-check-input" type="checkbox" name="hobby[]" value="1" @if(is_array(old('hobby')) && in_array(1,old('hobby'))) checked @endif > football

Ответ 5

Все они работают, более чистое решение, которое я принимаю, принимает форму следующего...

<input type="checkbox" name="departments[]" value="{{ $item->id }}" {{ in_array($item->id, old('departments', [])) ? 'checked' : '' }}>

Если $item является объектом, итерации по коллекции,

Вместо того, чтобы явно проверять, есть ли у нас массив, мы можем отложить значение по умолчанию старого значения как массив в экземпляре, который форма еще должна быть отправлена, или не было опций, проверенных в исходном запросе формы.

Возвращаясь к исходному запросу OPs, он может быть похож на приведенный ниже

<input class="form-check-input" type="checkbox" name="hobby[]" value="1" {{ in_array(1, old('hobby', [])) ? 'checked' : '' }}>

Ответ 6

@

foreach($brands as $key => $brand)
                             <label class="container col-sm-3">{!! $brand->name !!}
                                    <input type="checkbox" class="brand_id" id="brand_id" name="brand_id[]"
                                     value="{{@(!empty($brand->id) ? $brand->id : "")}}"
                                    @foreach($brand_sel as $key => $_sel)
                                     {{($brand->id == $_sel->brand_id ? "checked='checked'": '')}}
                                    @endforeach()
                                     />
                                    <span class="checkmark"></span>
                                </label>
                            @endforeach()