Как показать старые данные 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)) }}
все это, похоже, работает, более чистое решение, которое я принимаю, принимает форму следующего...
<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' : '' }}>