Как показать старые данные checkbox в 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>

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

5 ответов


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

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

можно использовать

<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) !!}

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


пришлось перебирать массив $userHobbies, чтобы вытащить только идентификатор для каждого элемента, а затем в представлении изменить флажок Form::на:

{{ Form::checkbox('hobby[]', $user->hobby, in_array($user->hobby, $hobbiesAvailableIds)) }}

Ref: http://laravel.io/forum/09-15-2014-how-to-show-checkboxes-as-checked-when-values-are-set-in-the-database


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

<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' : '' }}>