我将尽力详细解释我的问题。我发现了类似的问题,但根本没有描述我的情况。我不确定这是否有解决方案,可能是第三方错误。但是,让我们尝试一下。预先感谢!
上下文
Form::checkbox
和上述模型创建的复选框核心问题
从模型中打开一个具有名为“ required”的布尔属性的编辑表单,并且未选中应选中的复选框。如果我按F5,则该复选框显示为选中状态。
原因
根据Laravel Collective Documentation:
如果会话闪存数据中有一个与输入名称匹配的项目,则该项目将优先于模型的值。因此,优先级如下所示:
- 会话Flash数据(旧输入)
- 明确传递的价值
- 模型属性数据
我可以确认原来的输入在搞乱,但我不完全明白为什么。 FormBuilder按顺序调用以下函数:
checkbox()
checkable()
getCheckedState()
getCheckboxCheckedState()
最后一个条件验证如下:
if (isset($this->session) && ! $this->oldInputIsEmpty() && is_null($this->old($name))) {
return false;
}
那么,为什么oldInputIsEmpty()
返回false?为什么old("required")
为null?因为在上一个视图(访问编辑表单之前的视图)上,存在另一种表单,该表单没有名为“ required”的属性,而是用于过滤包含该模型的记录的列表。表单输入值将保留在会话(old_input)中,并携带到编辑表单中。
结论(和主要问题)
基本上,如何避免这种情况发生? 这种行为是故意的吗?还是没有人想到表格是后续表格?