如何在Laravel中显示复选框的旧数据?

时间:2016-09-15 23:20:59

标签: php 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>

怎么做?

7 个答案:

答案 0 :(得分:42)

这将有效:

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

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>

答案 1 :(得分:5)

您可以使用

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

答案 2 :(得分:3)

第一天

首先创建变量

$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

第二种方式

或者你可以这样做但在这种情况下你不会创建变量

@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

答案 3 :(得分:1)

必须遍历$ userHobbies数组才能获取每个项目的ID,然后在视图中将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

答案 4 :(得分:1)

所有这些似乎都起作用,我采用的一种更清洁的解决方案采用以下形式...

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

在迭代集合时$item是对象,

我们可以将旧值的默认值延迟为一个数组,而不是显式检查我们是否有数组,因为它是在尚未提交表单或原始表单请求中没有检查任何选项的情况下。 / p>

请参考OP的原始查询,其结构类似于以下内容

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

答案 5 :(得分:1)

使用Flash数据(Laravel Flash Data)为Blade设置有关已选中/未选中复选框的信息。

我的示例:应接受复选框“ legal”。

在控制器中:

  1. 在验证器中放置复选框

    'legal'  => 'required|accepted'
    
  2. 验证器设置了闪存数据后:

    $request->session()->flash('legal', 'true');
    

刀片中:

<input class="form-check-input" type="checkbox" name="legal"
id="legal" {{Session::has('legal') ? 'checked' :''}}

答案 6 :(得分:0)

@

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