Как показать старые данные флажка в 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
Ответ 4
Если бы итерация через массив $ userHobbies вытащила только идентификатор для каждого элемента, то в представлении изменился флажок Form:
{{ Form::checkbox('hobby[]', $user->hobby, in_array($user->hobby, $hobbiesAvailableIds)) }}
Ссылка: http://laravel.io/forum/09-15-2014-how-to-show-checkboxes-as-checked-when-values-are-set-in-the-database
Ответ 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()