Laravel Blade模板中数据库图片名为空时如何返回静态占位图片?
问题根因
你的代码异常是PHP运算符优先级规则导致的:
- 字符串拼接运算符
.的优先级高于Null合并运算符??,你写的代码实际执行逻辑是先完成'/images/user/'. $profile->photo的拼接,再对拼接结果做Null判断。 - 哪怕
$profile->photo为null,拼接后的结果/images/user/仍然是非Null值,所以??后的占位图逻辑永远不会触发。 - Laravel的
URL::asset方法处理末尾带斜杠的路径时会自动移除末尾斜杠,最终就出现了你看到的渲染结果。
修复方案
只需要给Null判断逻辑加括号,手动指定运算优先级即可,正确代码如下:
<img src="{{ URL::asset('/images/user/'. ($profile->photo ?? 'Firefighter-Silhouette.png')) }}" class="rounded-circle shadow-2 img-thumbnail" alt="">
修改后会先判断$profile->photo是否为Null:值存在时就用存储的图片名,值为空时就用占位图文件名,再和前面的路径拼接生成正确的资源地址。
内容的提问来源于stack exchange,提问作者SiriusPhil
相关产品推荐
相关产品推荐

