JS解析数据返回非对象空结果 Laravel读取$user_wallet属性报错如何解决
问题修复方案
错误根因
你遇到的Trying to get property 'balance' of non-object报错,本质原因不是$user_wallet->balance为null,而是**$user_wallet变量本身就是null**。你在null值上直接访问balance属性的操作,会先于你写的外层空合并运算符执行,直接触发报错,所以之前的调整没有生效。
修复代码
你需要先判断$user_wallet是否存在,再访问它的属性,调整后的完整JS代码如下:
$(document).on('click', '#custombtn', function(e) { e.preventDefault(); let form = $(this).parents('form'); swal( { title: "Alert!", // 此处优先判断$user_wallet是否存在,再访问balance属性 text: "Youre wallet balance is: {!! $user_wallet ? digits2persian(json_decode($user_wallet->balance)) : '暂无余额' !!}", type: "warning", allowEscapeKey: false, allowOutsideClick: false, showCancelButton: true, confirmButtonColor: "#DD6B55", confirmButtonText: "Yes", cancelButtonText: "No", showLoaderOnConfirm: true, closeOnConfirm: false }).then((isConfirm) => { if (isConfirm.value === true) { // 此处同步修复$user_wallet为null时访问id的报错风险 window.location.href = {!! json_encode(route('courseRegistrationWithWallet', ['course'=>$item->cor_id,'wallet'=> isset($user_wallet) ? $user_wallet->id : ''])) !!} } return false; }); });
如果你使用的是PHP8及以上版本,可以用更简洁的null安全运算符写法:
// 余额展示部分写法 {!! digits2persian(json_decode($user_wallet?->balance)) ?? '暂无余额' !!} // 路由参数部分写法 'wallet' => $user_wallet?->id ?? ''
额外优化建议
你可以在渲染视图前就对$user_wallet变量做默认值处理,比如在控制器中给不存在的钱包对象赋值一个空的默认对象,避免视图层重复写判断逻辑,代码可维护性更高。
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

