You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9 Breeze表单old方法处理空值、未勾选复选框失效问题

问题原因与修复方案

问题根源

  1. 文本输入框:你的三元运算符会将空字符串判定为false,导致用户提交空值时,错误显示数据库中的$subscription->text,而非保留用户输入的空状态。
  2. 复选框:用户未勾选复选框提交时,该字段不会被包含在请求中,old('published')返回null,此时三元运算符会取数据库的原始勾选状态,忽略了用户“未勾选”的操作。

修复代码

1. 文本输入框修复

直接使用old()函数的第二个参数作为默认值,无需手动编写三元判断:

<x-input id="text" type="text" name="text" value="{{ old('text', $subscription->text) }}" />

old()函数逻辑:优先使用表单提交的旧值(包括空字符串),仅当无旧值(首次加载表单)时,才用第二个参数的数据库默认值。

2. 复选框修复

通过request()->hasOldInput()区分“首次加载”和“表单提交回显”两种场景:

<input type="checkbox" name="published" @checked(request()->hasOldInput() ? old('published', false) : $subscription->published)>
  • 表单提交后回显:如果用户勾选过,old('published')返回true;未勾选则返回false(通过old()的第二个参数兜底),确保复选框状态匹配用户操作。
  • 首次加载表单:直接使用数据库中$subscription->published的原始状态。

内容的提问来源于stack exchange,提问作者mstdmstd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 20:39:07