J'utilise Laravel 5.3
, il s'agit d'une démo de formulaire ci-dessous:
<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>
Ma question est:
Je peux afficher les anciennes données dans input type="text"
comme ceci:
<input type="text" class="form-control" id="name" name="name" value="{{ old('name', $student->name)}}">
Et je peux afficher les anciennes données dans input type="radio"
comme ceci:
<input class="form-check-input" type="radio" name="gender" value="1" @if(old('gender',$student->gender)=="1") checked @endif>
Mais je ne sais pas comment afficher les anciennes données dans input type="checkbox"
:
<input class="form-check-input" type="checkbox" name="hobby[]" value="3" @if(...) checked @endif>
Comment faire?
Cela fonctionnera:
<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>
Aussi comme brokekidweb suggéré:
<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>
OR
<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>
Vous pouvez utiliser
<input class="form-check-input" type="checkbox" name="hobby[]" value="3" @if(in_array(3, old('hobby'))) checked @endif>
Ou vous pouvez simplement utiliser Laravel Collective https://laravelcollective.com/docs/5.3/html#checkboxes-and-radio-buttons
Et avoir un code comme celui-ci à la place:
{!! Form::checkbox('name', 'value', true) !!}
Celles-ci semblent toutes fonctionner, une solution plus propre que j’adopte se présente comme suit:.
<input type="checkbox" name="departments[]" value="{{ $item->id }}" {{ in_array($item->id, old('departments', [])) ? 'checked' : '' }}>
Où $item
est l'objet lors d'une itération sur une collection,
Plutôt que de vérifier explicitement si nous avons un tableau, nous pouvons différer la valeur par défaut de l'ancienne valeur en tant que tableau dans l'instance à laquelle le formulaire n'a pas encore été soumis ou qu'aucune option n'a été cochée dans la demande de formulaire d'origine.
En se référant à la requête initiale des OP, celle-ci pourrait être structurée de la même manière que ci-dessous.
<input class="form-check-input" type="checkbox" name="hobby[]" value="1" {{ in_array(1, old('hobby', [])) ? 'checked' : '' }}>
Il a fallu parcourir le tableau $ userHobbies pour obtenir uniquement l'ID de chaque élément, puis dans la vue, la case à cocher Form :: était remplacée par:
{{ Form::checkbox('hobby[]', $user->hobby, in_array($user->hobby, $hobbiesAvailableIds)) }}
@
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()