在 Laravel 中,在这种情况下如何在编辑表单上重新加载时获取旧的复选框值?

问题描述 投票:0回答:1

情况:

  • 有一个带有复选框和其他输入的编辑表格。
  • 在数据库中,此复选框的布尔值为 1。
  • 表单中复选框的代码如下:
<input type="checkbox" name="commerce" value="1"
    {{ old('commerce', $company->commerce) ? 'checked' : '' }} />
<label>Commerce</label>

编辑表单呈现并按预期选中复选框。之后:

  • 用户删除了FormRequest所需的字符串表单字段的内容。
  • 用户取消选中该复选框。
  • 用户发送表单。

表单会重新加载,因为需要空字符串字段。但是...

  • 尽管用户在发送表单之前取消选中了该复选框,但该复选框现在再次呈现为选中状态。

很容易理解,一旦取消选中该复选框,“commerce”参数就不会随表单一起传递。所以 old("commerce") 确实返回任何东西。然后使用默认值:数据库中的值 ($company->commerce) 等于 1。

在这种情况下,数据库上的值为 1(true),如何让用户选择在重新加载期间让复选框处于未选中状态?

谢谢你, 马西奥

laravel checkbox laravel-blade
1个回答
0
投票

这里的问题是,当您在提交之前没有选中表单中的复选框时,

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))/>
© www.soinside.com 2019 - 2024. All rights reserved.