情况:
<input type="checkbox" name="commerce" value="1"
{{ old('commerce', $company->commerce) ? 'checked' : '' }} />
<label>Commerce</label>
编辑表单呈现并按预期选中复选框。之后:
表单会重新加载,因为需要空字符串字段。但是...
很容易理解,一旦取消选中该复选框,“commerce”参数就不会随表单一起传递。所以 old("commerce") 确实返回任何东西。然后使用默认值:数据库中的值 ($company->commerce) 等于 1。
在这种情况下,数据库上的值为 1(true),如何让用户选择在重新加载期间让复选框处于未选中状态?
谢谢你, 马西奥
这里的问题是,当您在提交之前没有选中表单中的复选框时,
old()
助手根本无法识别它,而不是将其识别为未选中。所以对于 Laravel 来说,它是一个 null
值,这就是为什么它总是将复选框的状态设置为 $company->commerce
字段的值。
建议的解决方案是添加检查
old('commerce')
返回的值是否为 null
:
<input type="checkbox" name="commerce" value="1" {{ !is_null(old('commerce')) && old('commerce', $company->commerce) ? "checked" : "" }}/>
或者你甚至可以使用
@checked()
指令让它变得更整洁:
<input type="checkbox" name="commerce" value="1" @checked(!is_null(old('commerce')) && old('commerce', $company->commerce))/>