Laravel Blade - 如果验证失败,是否重新填充复选框?

Laravel Blade - Repopulate checkbox if validation failed?

如果验证表单请求失败但用户未提交表单然后使用数据库中的默认值,我该如何重新填充复选框?

假设我们有名称输入字段和一个复选框。

输入姓名

<input type="text" name="name" value="{{ old('name', $delivery->name) }}">

复选框:

<input type="checkbox" name="use_shipping"  @if(old('use_shipping', $delivery->use_shipping) == "1") checked="checked" @endif value="1">

输入名称字段工作正常,可以通过数据库重新填充值或在验证请求失败时重新填充值。

如果验证失败,复选框不会重新填充。如何解决这个问题?

例如,如果我没有输入姓名(输入字段)并且取消选中 use_shipping 复选框 - 它应该在提交表单后重新填充复选框(验证失败)。

试试这个:

<input type="checkbox" name="use_shipping" @if(old('use_shipping') || (old('use_shipping', null) == null && $delivery->use_shipping)) checked @endif value="{{ old('use_shipping') || (old('use_shipping', null) == null && $delivery->use_shipping)) }}">

*使用运费应该是布尔值

这应该可以解决问题:

<input name="use_shipping" type="checkbox" value="1" {{ old('use_shipping', $delivery->use_shipping) ? 'checked' : '' }} />

发生这种情况是因为浏览器不会在 post 数据中附加未选中的复选框,因此在重新填充表单时会使用 $delivery->use_shipping 的值。

您可以添加 "default" 值为 use_shipping 的隐藏输入来修复此行为:

<input type="hidden" name="use_shipping" value="0">
<input type="checkbox" name="use_shipping" value="1" {{ old('use_shipping', $delivery->use_shipping) ? 'checked="checked"' : '' }}>

选中复选框时这将正常工作,因为后面的值会覆盖前面的值。