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>
关键处理说明
可选链操作符处理null:
使用$user?->civil_status_id替代原有的$user->civil_status_id,当$user为null时,这个表达式会直接返回null,不会尝试读取属性,彻底避免"Attempt to read property on null"错误。三元运算符简化选中判断:
将嵌套的@if/@else逻辑合并成三元运算符,直接在option标签内判断是否需要添加selected属性,代码更简洁易读。当$user为null时,判断条件会返回false,不会选中任何选项,符合预期。冗余属性清理:
移除了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
相关产品推荐
相关产品推荐

