【问题标题】:Laravel blade check boxLaravel 刀片复选框
【发布时间】:2015-01-14 09:49:22
【问题描述】:

我想从数据库中设置复选框状态,所以我写了,

{{ Form::checkbox('asap', null, $offer->asap) }}

但是如果我想将'id'设置为复选框

{{ Form::checkbox('asap', null, $offer->ASAP, array('id'=>'asap')) }}

它总是将我的复选框状态设置为 true。 (在用户选择之前)

那么,当复选框状态在用户选择之前设置时,如何在刀片复选框中设置“id”?

【问题讨论】:

    标签: php laravel checkbox laravel-blade


    【解决方案1】:

    我知道这个问题之前已经回答过了,在这个问题中,我将逐步解释如何在不同情况下使用 Laravel/blade 实现复选框...

    因此,为了从数据库中加载您的复选框或测试是否选中了复选框:

    首先你需要了解它是如何工作的,正如@itachi 所说:

    {{ Form::checkbox( 第一个参数,第二个参数,第三个参数,第四个 论据)}}

    • 第一个参数:名称
    • 第二个参数:值
    • 第三个参数:检查或不检查这需要:true错误
    • 第四个参数:附加属性(例如,复选框css classe

    示例:

    {{ Form::checkbox('admin') }} 
    //will produces the following HTML
    <input name="admin" type="checkbox" value="1">
    
    {{ Form::checkbox('admin', 'yes', true) }}
    //will produces the following HTML
    <input checked="checked" name="admin" type="checkbox" value="yes">
    

    如何获取复选框值?(在您的控制器中)

    方法一:

    public function store(UserCreateRequest $request)
    {
    
       $my_checkbox_value = $request['admin'];
    
      if($my_checkbox_value === 'yes')
         //checked
      else
         //unchecked
      ...
    }
    

    方法二:

    if (Input::get('admin') === 'yes') {
        // checked
    } else {
        // unchecked
    }
    

    注意:您需要为未选中的框分配默认值:

    if(!$request->has('admin'))
    {
        $request->merge(['admin' => 0]);
    }
    

    这不错吧?但是我们如何在视图中设置复选框呢?

    为了获得良好的实践,我建议您在创建您的 表单这将自动填充具有相同名称的输入值 模型(以及使用不同的刀片 Form::inputs ..)

    {!! Form::model( $user, ['route' => ['user.update', $user->id], 'method' => 'put' ]) !!}
        {!! Form::checkbox('admin', 1, null) !!}
    {!! Form::close() !!}
    

    你也可以这样获取:

    {{ Form::checkbox('admin',null, $user->admin) }}
    

    好的,现在怎么处理:

    • 多个复选框
    • 添加 css 类
    • 添加复选框 ID
    • 添加标签

    假设我们想从数据库中获取工作日

    $working_days = array( 0 => 'Mon', 1 => 'Tue', 2 => 'Wed', 
                           3 => 'Thu', 4 => 'Fri', 5 => 'Sat', 6 => 'Sun' );
    
    @foreach ( $working_days as $i => $working_day )
    {!! Form::checkbox( 'working_days[]', 
                      $working_day,
                      !in_array($working_days[$i],$saved_working_days),
                      ['class' => 'md-check', 'id' => $working_day] 
                      ) !!}
    {!! Form::label($working_day,  $working_day) !!}
    @endforeach
    //$saved_working_days is an array of days (have 7 days, checked & unchecked)
    

    我花了一些时间弄清楚如何处理多个复选框我希望这可以帮助某人:)

    【讨论】:

    • 另一个建议是使用$request-&gt;merge(['admin' =&gt; $this-&gt;input('admin', 0)]);,我们可以删除if(!$request-&gt;has('admin'))
    【解决方案2】:

    第三个参数决定是否选中复选框。所以可能$offer-&gt;ASAP(或$offer-&gt;asap 为真(或不为假或不为空)。如果您想取消选中复选框,请将其设置为假,或者不使用第三个参数(设置为空或假) :

    {{ Form::checkbox('asap',null,null, array('id'=>'asap')) }}
    

    编辑

    另一种可能性是您的页面上有一些自定义 JavaScript 代码,该代码通过 asap id 查找元素并选中此复选框。所以当你不设置id的时候,JavaScript是无法勾选的,但是当你设置了这个id的时候,复选框会被JavaScript勾选。

    【讨论】:

    • $offer->ASAP 从数据库中取值并且它是 0 (FALSE),所以如果我写 {{ Form::checkbox('asap',null,$offer->asap) }}一切正常,但如果我想要广告一些 id 它总是 TRUE
    • @lggg3 你确定吗?你的页面上有 JavaScript 吗? JavaScript 有可能通过 asap id 找到元素(如果你有这样的脚本)并检查它(当然不管你在 Laravel 中传递了什么)
    • 你写的是我在代码中发现 JavaScript 总是将框设置为 true
    • @lggg3 很高兴,我可以帮忙
    【解决方案3】:

    FormBuilder.php

        public function checkbox($name, $value = 1, $checked = null, $options = array())
    {
        return $this->checkable('checkbox', $name, $value, $checked, $options);
    }
    
    • 第一个参数:名称
    • 第二个:价值
    • 第三个:检查与否(即 null、false 或 true)
    • 第四个:属性。

    {{ Form::checkbox('asap',null,$offer-&gt;ASAP, array('id'=&gt;'asap')) }}

    您的订单有误。

    应该是,

    {{ Form::checkbox('asap',$offer->ASAP, null, array('id'=>'asap')) }}
    

    【讨论】:

    • 错误的订购是错误的。看看你的帖子
    • 你能说出上面的错误吗?
    • 你写的应该是 {{ Form::checkbox('asap',$offer->ASAP, null, array('id'=>'asap')) }} 但实际上应该是 {{ Form::checkbox('asap',null,$offer->ASAP, array('id'=>'asap')) }} 在代码中找到错误,我发现总是选中该框的 javascript跨度>
    • 没错。它适用于您的情况,因为您仅将$offer-&gt;asap 设置为01(或等效项)。只看方法。你的订单是错误的。但它之所以有效,是因为您从数据库返回的内容。如果您将值设置为“是”或“否”,您将得到意想不到的结果。
    【解决方案4】:

    祝你好运!

     <div class="togglebutton">
           <label>
           @if ($programmer->play === 1)
              <input type="checkbox" name="play" checked="">
           @else
              <input type="checkbox" name="play" {{ old('play') ? 'checked' : '' }} >
           @endif
              Play
          </label>
    
     </div>
    

    【讨论】:

    • 如果您想检查文件 create.blade.php 中的复选框是否处于活动状态,请遵循代码。
    猜你喜欢
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2021-12-18
    • 2020-03-12
    • 1970-01-01
    • 2014-01-05
    相关资源
    最近更新 更多