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

Laravel Blade中添加null避免空属性读取错误的实现方法

解决方案

要解决这个错误,核心是在访问$user的属性前先处理$user为null的情况,同时用三元运算符简化选中状态的判断逻辑,具体修改如下:

修改后的Blade代码

<div class="col-sm-12 col-lg-4">
    <div class="form-group row">
        <label for="step1_civilStatus" class="col-sm-3 text-right control-label col-form-label">Civil Status</label>
        <div class="col-sm-9">
            <select class="form-control" id='civilStatus'>
                <option>Select Civil Status</option>
                @foreach($statuses as $status)
                    @if($status->id > 0)
                        <option value="{{ $status->id }}" {{ ($user?->civil_status_id == $status->id) ? 'selected' : '' }}>
                            {{ $status->complete_name }}
                        </option>
                    @endif
                @endforeach
            </select>
        </div>
    </div>
</div>

关键处理说明

  1. 可选链操作符处理null:
    使用$user?->civil_status_id替代原有的$user->civil_status_id,当$user为null时,这个表达式会直接返回null,不会尝试读取属性,彻底避免"Attempt to read property on null"错误。

  2. 三元运算符简化选中判断:
    将嵌套的@if/@else逻辑合并成三元运算符,直接在option标签内判断是否需要添加selected属性,代码更简洁易读。当$user为null时,判断条件会返回false,不会选中任何选项,符合预期。

  3. 冗余属性清理:
    移除了select标签中多余的type="date"属性(select标签不支持该属性)。

兼容旧版PHP的替代写法

如果你的PHP版本低于7.4(不支持可选链操作符),可以改用isset()判断:

<option value="{{ $status->id }}" {{ (isset($user) && $user->civil_status_id == $status->id) ? 'selected' : '' }}>
    {{ $status->complete_name }}
</option>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:35:28