20

我正在使用 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 个回答    正确答案


我使用了 laravelcollective/html package包,就可以使用 Form::checkbox 了,

下面代码 使用了 Form::checkbox, 不需要考虑到 old 函数了吧

{{ Form::checkbox('zixun_ids[]', $zixun->zixun_id ,
!
empty($shijihuikuan) ? in_array($zixun->zixun_id,$shijihuikuan->zixuns()->pluck('zixuns.zixun_id')->toArray()):null) }}

这是 checkbox 的定义 public function checkbox($name, $value = 1, $checked = null, $options = [])

参数: 第一个为name名,第二个为当前的这个checkbox的值,第三个为是否选中,第四个为  array('class'=>'isnesdbox') 等checkbox的属性选项数组


以下可能正确,但比较复杂

73

这将起作用:

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

也正如brokenkidweb建议的那样:

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

第一种方式

首先创建变量

$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

  • 这比我接受的答案更有效,因为,如果没有选中复选框,则不会创建数组,因此您会收到错误消息:in_array() 期望参数 2 为数组,给定为 null – 阿多卡 2017 年 5 月 1 日 12:51
2

这些似乎都有效,我采用的更清洁的解决方案采用以下形式...

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

$item迭代集合时对象在哪里

与其显式检查我们是否有一个数组,我们可以将旧值的默认值推迟为尚未提交表单的实例中的一个数组,或者原始表单请求中没有检查任何选项。

回顾 OP 的原始查询,它的结构可以类似于以下内容

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

必须遍历 $userHobbies 数组以仅提取每个项目的 ID,然后在视图中将 Form::checkbox 更改为:

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

1

使用 flash data ( Laravel Flash Data ) 设置 Blade 关于选中/未选中复选框的信息。

我的例子:应该接受的复选框“合法”。

在控制器中:

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

@

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

你的答案

来自  https://stackoverflow.com/questions/39521726/how-to-show-old-data-of-dynamic-checkbox-in-laravel