【问题标题】:Edit form issue with default value for checkbox regarding old value on error编辑表单问题,复选框的默认值与错误时的旧值有关
【发布时间】:2021-08-22 17:55:41
【问题描述】:

我有一个问题,看起来像是 Laravel 复选框 old() 值的错误。我有一个代码,我想在编辑时填写默认值,如果表单提交失败,我想在表单中填写 old() 值。

问题是当原始数据库值为 TRUE 并且新表单提交对于复选框为 false 时。 Laravel old() 不会在提交复选框时捕获 FALSE 值并填充原始值为 TRUE。

<input name="active" type="checkbox"
    @if( old('active', $voucher->active ?? false) ) checked='checked' @endif
>

如果提交为 FALSE,它会回退到默认值。我发现的所有解决方案都是错误的。我该如何解决?

【问题讨论】:

    标签: php laravel forms checkbox


    【解决方案1】:

    我觉得应该是的

    <input name="active" type="checkbox"  value="{{old('active', $voucher->active ?? 0)}}" {{isset($voucher->active)?'checked':''}}>
    

    仍然想检查它是否为真或 1 或 0 你可以检查如下

    <input name="active" type="checkbox" value="{{old('active', $voucher->active ?? 0)}}" {{(isset($voucher->active)&&$voucher->active==true)?'checked':''}}>
    

    根据我。对于您的要求,复选框不适合。最好选择单选按钮。因此用户可以在活动时选择 true 或 false

    【讨论】:

    • 如果提交发送 FALSE 且原始值为 TRUE,则为 TRUE。在这种情况下它必须是 FALSE。
    • 那么你必须设置 value="{{old('active', $voucher->active ?? false)}}"
    • 不明白。它看起来像一个 hack,我不确定。
    • 你能试试 value="{{old('active', isset($active)&&$active==true?1: 0)}}" 但它对我来说不是用户友好的.since 复选框肯定会被点击而不被点击
    • 我建议你使用单选按钮,这样你就可以提供是或否或真或假
    【解决方案2】:

    所以解决方案是测试另一个字段,如 @old('submit')

    <input name="active" type="checkbox"
        @if( old('active') || (!old('submit') && $voucher->active) ) checked='checked' @endif
    >
    

    通过提交发送。它似乎有效,但不知道它是否总是发送或者是否存在提交可能为空的用例。

    【讨论】:

      【解决方案3】:

      试试这个

      <input type="checkbox" class="custom-control-input" name="active" value="1"
          @if((old('_token') && old('active') != null) || (old('_token') == null && $voucher->active))
          checked 
          @endif
      >
      

      【讨论】:

      • 它看起来比我的解决方案更复杂。你读了吗?
      • 如果我不在您的解决方案中的表单中使用“提交”名称怎么办?
      • 使用 _token 的解决方案很好。但在大多数情况下,您编写了这段代码。所以你知道提交按钮的名称是什么。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多