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

编辑表单技术问题:如何区分初始加载与空旧值状态

解决Laravel表单input值保留空字符串的问题

问题根源是你用了松散相等== null,在PHP中空字符串""和null进行松散比较时会被判定为相等,导致提交空字符串时,逻辑又回到了$prod的初始值。

解决方案

利用Laravel old()函数的默认参数特性,直接简化value的逻辑:

<input type="number" class="form-control @error('prodCost') is-invalid @enderror" name="prodCost" id="prodCost" max="10000000" min="0"
     value="{{ old('prodCost', isset($prod) ? $prod->getCost()->getValue() : '') }}"
>

逻辑说明

  • old('prodCost', 默认值)的行为是:如果session中存在prodCost的提交值(包括空字符串),就返回该值;如果不存在(初始加载状态),则使用后面的默认值。
  • 初始加载时:
    • 编辑场景:isset($prod)为true,默认值是$prod->getCost()->getValue(),显示初始值
    • 新增场景:isset($prod)为false,默认值是空字符串,输入框为空
  • 提交空字符串或无效值后:
    • old('prodCost')会返回提交的空字符串,输入框保持为空,同时配合@error显示错误提示

另一种写法(用严格相等判断)

如果不想用old的默认参数,也可以把松散相等改成严格相等===,明确只在old('prodCost')严格为null时才使用初始值:

value="{{ old('prodCost') !== null ? old('prodCost') : (isset($prod) ? $prod->getCost()->getValue() : '') }}"

这两种写法都能解决空字符串被当成null的问题,优先推荐第一种,更符合Laravel的惯用写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:17:14